module.exports
出现令人惊讶的行为。以下代码:
module.exports = { test: 4};
module.exports.testMe = () => {console.log(this.test);};
输出undefined
。但是:
module.exports.test = 4;
module.exports.testMe = () => {console.log(this.test);};
输出4
。为什么它的表现不同?
答案 0 :(得分:1)
原因与箭头功能的工作方式有关,它们绑定到this
(就像你使用.testMe = fn.bind(this);
一样)。
在第一种情况下,您正在覆盖module.exports
,但this
仍然指向旧对象。因此,当testMe()
隐式绑定到this
时,您会获得undefined
,因为原始test
上没有module.exports
属性。
在第二种情况下,您不覆盖module.exports
,因此module.exports === this
和testMe()
隐式绑定到this
并输出' 4'正如所料,因为它们都指向同一个对象,test
存在。