module.export表现得很奇怪

时间:2016-03-16 09:46:26

标签: javascript node.js module

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。为什么它的表现不同?

1 个答案:

答案 0 :(得分:1)

原因与箭头功能的工作方式有关,它们绑定到this(就像你使用.testMe = fn.bind(this);一样)。

在第一种情况下,您正在覆盖module.exports,但this仍然指向旧对象。因此,当testMe()隐式绑定到this时,您会获得undefined,因为原始test上没有module.exports属性。

在第二种情况下,您覆盖module.exports,因此module.exports === thistestMe()隐式绑定到this并输出' 4'正如所料,因为它们都指向同一个对象,test存在。