this问题

135 阅读1分钟

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