在javascript中,this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window。
下面来解释一下this绑定的四种情况:
1、默认绑定
默认绑定全局变量
function fn() {
console.log( this.a );
}
var a = 2;
fn();
// 2 -- fn单独调用,this引用window
2、隐式绑定
this引用的是函数据以执行的环境对象
function fn() {
console.log( this.a );
}
var obj = {
a: 2,
fn: fn
};
obj.fn();
// 2 -- this引用obj。
3、显式绑定
apply()、call()和bind()在特定的作用域中调用函数,实际上等于设置函数体内this对象的值
function fn() {
console.log( this.a );
}
var obj = {
a: 2
};
fn.call( obj );
// 2
4、new绑定
如果是一个构造函数,那么用new来调用,那么绑定的将是新创建的对象
function fn(a) {
this.a = a;
}
var bar = new fn( 2 );
console.log( bar.a );
// 2