this对象是指向函数的运行环境。
函数被当做某个对象的方法调用时this等于那个对象。
var name = 'window';
var obj = {
name:'obj',
sayName:function(){
console.log(this.name);
}
};
obj.sayName();//obj
没有明确的当前对象时 this等于window
在全局函数(其实就是window的方法)中this等于window.
var name = 'window';
function a (){ console.log(this.name); } a();//window
局部变量引用的函数
var name = "window"; var Bob = { name: "Bob", showName: function(){ console.log(this.name); } }; var Tom = { name: "Tom", showName: function(){ var fun = Bob.showName; fun(); } };
Bob.showName(); //Bob
var demo = Bob.showName;
demo() //window
Tom.showName(); //window
setTimeout、setInterval和匿名函数 this等于window
eval函数
该函数执行时的作用域是当前作用域,即等同于在该行将里面的代码填进去。
new
new关键字后的构造函数中的this指向用该构造函数构造出来的新对象。
apply和call
apply和call是唯一能改变函数的this指向的函数
IE
在使用attachEvent()方法时,事件处理程序会在全局作用域中运行,this等于window。
var btn = document.getElementById('myBtn'); btn.attachEvent('onclick',function(){ console.log(this === window);//true });
把外部函数的this对象保存在一个函数能访问到的变量里,就能访问到该对象了。
var name = 'window'; var obj = { name:'obj', getFn:function(){ var that = this; return function(){ return that.name + this; } } }; //该函数的this还是指向window console.log(obj.getFn()());// obj[object Window]