[英]Node.js : module exports, only object
我不明白为什么只有对象能很好地导出。 看那个:
第一个档案
var a = exports.a = {};
var b = exports.b = 0;
exports.xxxxx = function(){
a.hello = 'help';
b = 104;
};
第二档
var a = require('firstfile').a;
var b = require('firstfile').b;
module.exports = function(){
console.log(a); // {hello:'help'}
console.log(b); // 0
};
为什么呢
出口b的解决方案是这样的:
第一个文件:
...
a.hello = 'help';
exports.b = 104; // (add exports)
...
第二档:
...
var b = require('firstfile');
...
console.log(b.b); // 104
为什么?
编辑
我想我明白了。
变量a仅作为参考! 我会向一个不了解的人解释:
a = {}, b = 0
exports.b = 104
//我们更改模块的值! 谁是必需的。 现在,为什么对象不同?
重要的是要记住两件事:
再见! 希望有帮助!
当为exports.b
分配0
时,它实际上被分配为常数。 您可以更新b
变量指向的值,但不会重新导出。
例如,我通过添加getB
函数来稍微修改了您发布的getB
:
var a = exports.a = {};
var b = exports.b = 0;
exports.xxxxx = function(){
a.hello = 'help';
b = 104;
};
exports.getB = function() { return b; };
然后,您可以通过在REPL中处理此文件来了解我的意思:
> var example = require('./example.js');
undefined
> example
{ a: {},
b: 0,
xxxxx: [Function],
getB: [Function] }
> example.xxxxx()
undefined
> example.getB()
104
> example.b
0
>
编辑:您对参考的评论有些正确。 当你最初说
var b = exports.b = 0;
您是说两个变量指向相同的值。 这与指向同一引用(对象,就像您对进行a
)的两个变量不同。 当您修改一个值时,另一个值不会被修改。 换句话说,当您将0的值更改为1时,您不希望代码中的每个0
实例也都为1
。 那不是很好。
如果希望b
为一个值并在每次修改该值时得到更新,则应重新分配exports.b
。 这就是为什么您将大多数代码视为一个对象正在导出的原因的一部分...然后,您的导出被视为引用,并且所有b
均按预期进行了更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.