this的指向问题
函数的不同调用方式决定了this的指向不同
函数的定义与调用
调用方法 | this指向 |
---|---|
普通函数 | window |
对象方法 | 该方法所属对象 |
构造函数 | 实例对象,原型对象里面方法的this也指向实例对象 |
事件绑定 | 绑定事件对象 |
定时器函数 | window |
立即执行函数 | window |
1.普通函数 指向window
function fn() {
console.log('普通函数的this指向' + this);
}
fn();
运行结果:普通函数的this指向[object Window]
2.对象的方法 this指向的是该方法所属对象
var o = {
sayHi: function () {
console.log('对象方法的this指向' + this);
}
}
o.sayHi();
运行结果:对象方法的this指向[object Object]
3.构造函数 this指向实例对象(Hello) 原型对象里面的方法的this也是指向实例对象
function Hello() {
console.log('构造函数的this指向'+this);
};
var sayHello = new Hello();
运行结果:构造函数的this指向[object Object]
4.绑定事件函数 this指向函数的调用者btn这个绑定事件对象
btn.onclick = function () {
console.log('绑定事件函数的this指向' + this);
}; //点击按钮即调用
运行结果:绑定事件函数的this指向[object HTMLButtonElement]
5.定时器函数 this指向window
setInterval(function () {
console.log('定时器的this指向' + this);
}, 1000); //自动1秒钟调用一次
运行结果:定时器的this指向[object Window]
6.立即执行函数(自动调用) 指向window
(function(){
console.log('立即执行函数指向'+this);
})();
运行结果:立即执行函数指向[object Window]