繁体   English   中英

Node.js:模块导出,仅对象

[英]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
  • 当我们更改b时,b被更改,但模块(出口)没有更改!
  • 这是正常的exports.b = 104 //我们更改模块的值! 谁是必需的。

现在,为什么对象不同?

  • 因为当执行文件2时。 (执行一次),则a = {}的值。
  • 但显示{xxx:xxx}
  • 这是因为执行文件时a的值不是{},而是该对象的引用。
  • 因此,当我们需要采用该对象时,我们将搜索所有参考。

重要的是要记住两件事:

  • 功能所需的模块将被读取一次! 需要在功能中查看更改。
  • 对象库存参考。

再见! 希望有帮助!

当为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM