this:不要关注this的定义在哪 ,需要关注this的调用在哪。
一、全局this
console.log(this); // window
二、局部this(函数内部);
1、直接调用 :this指向window
function=(){
console.log(this); // this就是window
}
fn();
2、通过事件来调用函数 :this会指向事件源 (谁触发的事件,那么谁就是事件源);
<button class="btn">点击</button>
var btnEle= document.querySelector(".btn");
btnEle.onclick=function(){
console.log(this);//<button class="btn">点击</button>
}
3、通过对象本身来调用函数: this会指向 调用函数的该对象
var obj = {
name:"张三",
fn:function(){
console.log(this);
}
}
obj.fn();//{name:"张三",fn:f}
4、对象里的函数通过非对象方式调用: this就指向window
var obj = {
name:"张三",
fn:function(){
console.log(this);
}
}
var myfn = obj.fn; //没有调用 而是通过一个变量赋值
myfn();//通过一个变量调用 所以这里的this指向window
5、在定时器里的this :定时器里的this都是指向window
setTimeout(function(){ //执行一次
console.log("settimeout",this);
}, 2000);
6、严格模式下 this会指向undefined