我对JavaScript很陌生,我刚开始使用.apply()
和其他使用关键字this
的方法,我可以说this
有事情可做使用调用函数的上下文,但我真的想了解this
究竟是指什么。
特定函数调用与this
之间的关系看起来类似于对象与属性/方法之间的关系。
这两种关系究竟是否相关?
答案 0 :(得分:1)
根据ECMAScript Language Specification Section 11.1.1,答案是
this关键字的计算结果为当前执行上下文的ThisBinding值。
答案 1 :(得分:1)
以下是您可以考虑的三种情况。这些都没有正式描述,而是简单直观:
默认上下文
如果你没有指定上下文并调用函数(不是方法),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