今天我发现使用导出的方式非常奇怪......这是单独的nodejs模块的代码,可以重现它。
大家将值分配给this
范围,等于exports
变量。他们如何实现exports
= this
?
(function() {
this.Test = (function(){
function Test() {
this.name = 'Test 1';
}
return Test;
})();
// Will output Test { name: 'Test 1' }
console.log(new exports.Test);
// Will output { Test: [Function: Test] }
console.log(exports);
}).call(this);
答案 0 :(得分:1)
在节点中,exports
与DOM中的window
对象非常相似,window.foo
等同于this.foo
,在全局范围内使用时。
在这种情况下,exports
基本上是整个模块的this
。当您使用.call(this)
时,您实际上是手动将匿名函数的this
值设置为模块的this
值,AKA是全局范围对象。
因此,调用中的this
引用全局范围,匿名函数绑定到全局this
,exports
等同于全局this
。
您的代码等同于:
this.Test = (function(){
function Test() {
this.name = 'Test 1';
}
return Test;
})();
// Will output Test { name: 'Test 1' }
console.log(new exports.Test);
// Will output { Test: [Function: Test] }
console.log(exports);