js this 问题

class Animal {    constructor(){        console.log(this);        this.type = 'animal'
    }
    says(say){
        setTimeout(function(){            console.log(this);            console.log(this.type + ' says ' + say)
        }, 1000)
    }
}

为什么一个this是Animal对象,一个this是window对象?


天涯尽头无女友
浏览 520回答 1
1回答

饮歌长啸

这是JS中一个不好的地方: setTimeout的执行上下文是window对象而不是class Animal. 导致了setTimeout中的函数是基于全局作用域执行, 其中的this指向了window可以这样解决(ES6):setTimeout(() => {    // you code...     }, 1000)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript