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(){ alert(this.name); } }; var Tom = { name: "Tom", showName: function(){ var fun = Bob.showName; fun(); } }; 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]
时间: 2024-09-28 21:11:46