- 作为对象的方法调用
当函数作为对象的方法被调用时,this指向该对象。
var a = {
b:1,
getB:function(){
console.log(this.b) //输出: 1
}
}
a.getB()
- 作为普通函数调用
当函数不作为对象的属性被调用,也就是普通函数方式,this指向全局对象。
window.b = 2
var a = {
b: 1,
getB:function(){
return this.b
}
}
var getB = a.getB
console.log(getB()) //输出2
- 构造器调用
当用new运算符调用函数时,该函数总会返回一个对象,构造器里的this就指向返回的这个对象。
var A = function(){
this.b = 'hi'
}
var a = new A()
console.log(a.b) //输出:hi
- Function.prototype.call或Function.prototype.apply调用
call和apply可以动态地改变传入函数的this。
var a1 = {
b:1,
getB: function(){
return this.b
}
}
var a2 = {
b: 2
}
console.log(a1.getB()) //输出:1
console.log(a1.getB.call(a2)) //输出:2