JavaScript中this有多种含义,完全取决于this的调用方式。
- 1、默认绑定
function foo() {
console.log(this.a); // 2
}
var a = 2;
foo();
函数foo() 在调用时,this被默认绑定到了全局对象。
- 2、作为对象方法调用
function foo() {
console.log(this.a);
}
var obj = {
a: 2,
foo: foo,
bar: function() {
console.log(this.a);
}
};
var a = 1;
foo(); // 1
obj.foo(); // 2
obj.bar(); // 2
函数作为对象的方法调用时,this被绑定到该对象。但是当该函数内部又定义了一个函数时,内部函数的this指向window。
var obj = {
a: 2,
bar: function() {
console.log(this.a); // 2
function daz() {
console.log(this.a); // 1
}
daz();
}
};
var a = 1;
obj.bar();
/************************************************/
var obj = {
a: 2,
bar: function() {
console.log(this.a); // 2
a = 3;
console.log(this.a); // 2
function daz() {
console.log(this.a); // 3
}
daz();
}
};
var a = 1;
obj.bar();
- 3、使用new绑定
this指向new创建的对象。
function Foo() {
this.a = 1;
}
var a = 2;
var bar = new Foo();
console.log(bar.a); // 1
- 4、使用apply或call绑定
apply和call 可以改变函数执行的作用域,函数使用apply或call进行绑定时,this指向apply传入的对象;
function foo() {
console.log(this.a);
}
var obj = {
a: 2,
foo: foo
}
var a = 1;
foo.apply(obj);
foo();