Es6箭头函数的this指向问题

this的指向问题,this绑定定义的对象

箭头函数的this绑定看的是this所在的函数定义在哪个对象下,绑定到哪个对象则this就指向哪个对象 
如果有对象嵌套的情况,则this绑定到最近的一层对象上

//定义一个对象

var obj = {

x:100,

//属性x

show(){

//延迟500毫秒,输出x的值

setTimeout( //匿名函数 function(){console.log(this.x);}, 500 );

}

};

obj.show();//打印结果:undefined

为什么结果打印是undefined呢,问题出在了this上,当代码执行到了setTimeout( )的时候,此时的this已经变成了window对象(setTimeout( )是window对象的方法),已经不再是obj对象了,所以我们用this.x获取的时候,获取的不是obj.x的值,而是window.x的值,再加上window上没有定义属性x,所以得到的结果就是:undefined。

如果使用箭头函数来编写同样的一段代码,得到的this.x又是另一番景象。我们来试试看:

//定义一个对象
    var obj = {
        x:100,//属性x
        show(){
            //延迟500毫秒,输出x的值
            setTimeout(
               //不同处:箭头函数
               () => { console.log(this.x)},
               500
            );
        }
    };
    obj.show();//打印结果:100

当定义obj的show( )方法的时候,我们在箭头函数编写this.x,此时的this是指的obj,所以this.x指的是obj.x。而在show()被调用的时候,this依然指向的是被定义时候所指向的对象,也就是obj对象,故打印出:100。

上述内容属于转载的,看这篇文章对于我这人对这块理解比较透彻。

猜你喜欢

转载自blog.csdn.net/weixin_42554311/article/details/82589733
今日推荐