JavaScript有本身的一套this机制,在差别状况下,this的指向也不尽相同。
全局局限
console.log(this); //全局变量
全局局限运用this指向的是全局变量,浏览器环境下就是window。
注:ECMAScript5的strict形式不存在全局变量,这里的this是undefined。
函数挪用中
function foo() {
console.log(this);
}
foo(); //全局变量
函数挪用中的this也指向全局变量。
注:ECMAScript5的strict形式不存在全局变量,这里的this是undefined。
对象要领挪用
var test = {
foo: function () {
console.log(this);
}
}
test.foo(); //test对象
对象要领挪用中,this指向挪用者。
var test = {
foo: function () {
console.log(this);
}
}
var test2 = test.foo;
test2(); //全局变量
不过因为this的晚绑定特征,在上例的状况中this将指向全局变量,相当于直接挪用函数。
这点非常重要,一样的代码段,只要在运行时才肯定this指向
组织函数
function Foo() {
console.log(this);
}
new Foo(); //新创建的对象
console.log(foo);
在组织函数内部,this指向新创建的对象。
显式设置this
function foo(a, b) {
console.log(this);
}
var bar = {};
foo.apply(bar, [1, 2]); //bar
foo.call(1, 2); //Number对象
运用Function.prototype的call或许apply要领是,函数内部this会被设置为传入的第一个参数。