0%

this关键字


this的指向大概可以分成四种:

  • 作为对象的方法调用
  • 作为普通函数调用
  • 构造器调用
  • Function.prototype.call或Function.prototype.apply调用

1. 作为对象的时候,this指向该对象

1
2
3
4
5
6
7
8
var obj = {
a: 1,
getA: function() {
alert(this === obj); //true;
alert(this.a); //1
}
};
obj.getA();

2. 作为普通函数调用,this总是指向全局对象(在浏览器中就是window)

1
2
3
4
5
window.name = 'globalName';
var getName = function() {
return this.name;
};
console.log(getName()); //globalName

再例如局部的callback,它作为普通函数调用时,callback内部的this指向了windows对象,解决方法则可以用一个变量保存this,例如

1
2
3
4
5
6
7
document.getElemmentById('div1').onclick = function() {
var that = this;
var callback = function() {
alert(that.id); //div1;
}
callback();
}

3. 构造器调用

当用new运算符调用