猿问

this关键字问题

如图,框框中的this为什么会是Person对象而不是windows呢,不是说settimeout函数的执行对象是windows,this都会指代windows,那settimeout中出现的this不应该都是windows吗?

就像为什么下面这个匿名函数我绑定this,但是并没有指向person对象,还是打印的XL大写?只能通过that = this这样来转换才能改变this指向 这是为什么呢


    var name="XL";

    var person={

        name:"xl",

        showName:function(){

            console.log(this.name);

        },

        sayName:function(){

            (function(callback){

                callback();

            }.bind(this))(this.showName)

        }

    }

    person.sayName(); //XL


临摹微笑
浏览 389回答 4
4回答

胡说叔叔

两个地方你都是把匿名函数的this绑定到了person对象上,不同的是第二个地方你是通过callback函数打印name,你并没有绑定这个函数的this所以是指向window对象的name。

慕盖茨4494581

第一个setTimeout=>bind(this),这个this当前代表的就是Person这个构造函数,如果没有bind(this)那么setTimeout里面的this指向的就是window,第二个一样的情况,因为(this.showName)里面的this就是person对象
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答