JavaScript中this指向疑问:为何console.log里的this不指向window?
问题解答
首先明确核心:你代码里
console.log('I am', this.firstName)中的this,不是console.log函数内部的this,而是它所在的superGreet方法执行上下文里的this。为什么
superGreet里的this指向myName?
这是JavaScript的隐式绑定规则:当函数作为对象的方法被调用时(比如myName.superGreet()),函数内部的this会自动绑定到调用这个方法的对象,也就是myName。再说说
console.log自身的this:
单独调用console.log(this)时,这个this才指向console对象(浏览器环境下),但它和你代码里参数位置的this完全是两回事。你代码里的this.firstName是在superGreet的作用域里,所以用的是superGreet绑定的myName对象。可以加两行代码验证:
superGreet() { console.log(this === myName); // 输出 true,证明this是myName console.log(this === console); // 输出 false,证明和console无关 console.log('I am', this.firstName); }
内容的提问来源于stack exchange,提问作者jay26
相关产品推荐
相关产品推荐

