this指向
1. 普通函数this指向window
function fn() {
console.log(this)
};
fn();//window
2. 构造函数this指向调用它的实例
function Star() {};
Star.prototype.a = function() {
console.log(this)
};
var obj = new Star();
obj.a();//obj
3. 对象的方法调用
var o = {
fn: function() {
console.log(this);
}
}
o.fn();//o
4. 事件绑定方法
绑定事件函数this指向的是函数的调用者btn这个按钮对象
var btn = document.querySelector('button');
btn.onclick = function() {
console.log(this);//btn
}
5. 定时器函数
定时器函数this指向window
setTimeout(function() {
console.log(this);//window
},1000)
6. 立即执行函数
立即执行函数this指向的是window
(function() {
console.log(this);//window
})();
7. 箭头函数
箭头函数的this是在定义函数时绑定的,不是在执行过程中绑定的。简单的说,函数在定义时,this就继承了定义函数的对象。
var obj = {
fn1: function() {
setTimeout(function(){
console.log(this);//window
}, 100)
},
fn2: function(){
setTimeout(() => {
console.log(this);//obj
}, 100)
}
}
var a = 1;
function fn() {
this.a = 2;
return () => {
console.log(this.a);//2
}
}
8.嵌套函数
对象里面的函数方法,如果是对象直接包含那么它的this指向该对象,如果是嵌套的函数它的this指向window
var obj = {
fun: function() {
console.log(this);//obj
function count(){
console.log(this);//window
}
count();
}
}
9.匿名函数
匿名函数的执行环境是the window