我对 JavaScript 很陌生,我刚刚开始使用.apply()
和其他使用关键字 this
的方法,我可以说this
与调用函数的上下文有关,但我真的很想了解this
到底指的是什么。
特定函数调用和this
之间的关系类似于对象和属性/方法之间的关系。
这两种关系到底有关系吗?
根据 ECMAScript 语言规范第 11.1.1 节,答案是
this 关键字的计算结果为当前执行上下文的 ThisBinding 的值。
这里有三种情况,你可以考虑。没有正式描述,而是简单直观:
默认上下文
如果不指定上下文并调用函数(不是方法),this
将是全局对象:
function foo() {
console.log(this); //window
}
隐式设置上下文
如果你调用一个函数,这是给定对象的方法this
将是最后一个点之前的对象:
function foo() {
console.log(this);
}
var bar = {};
bar.foo = foo;
bar.foo(); //bar
bar.baz = {};
bar.baz.foobar = foo;
bar.baz.foobar(); //bar.baz
显式设置上下文
您可以使用call
、apply
、bind
更改上下文:
function foo() {
console.log(this);
}
foo.call(1); //1
foo.call(window); //window
var bar = {};
bar.foo = foo;
bar.foo.apply(42); //42