首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能从Node.js中的另一个文件中设置一个导出变量?

为什么我不能从Node.js中的另一个文件中设置一个导出变量?
EN

Stack Overflow用户
提问于 2016-08-02 18:49:54
回答 2查看 303关注 0票数 1

考虑这两个方案:

测试1.js:

代码语言:javascript
复制
'use strict';
var two=require('./testing2');

two.show();
two.animal='Dog';
two.show();

测试2.js:

代码语言:javascript
复制
'use strict';
var animal='Cat';

function show()
   {
   console.log(animal);
   }

module.exports.animal=animal;
module.exports.show=show;

当我在Node.js中运行这个程序时,它会打印“猫猫”。我以为它会印上“猫狗”。为什么它要打印“猫猫”,我如何让它打印“猫狗”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-02 19:06:04

我认为问题在于,two.animalvar animal是两个不同的变量。show函数总是记录在testing2.js中定义的var animal

对于testing2.js,我会这样做:

代码语言:javascript
复制
'use strict';

module.exports = {
    animal: 'Cat',
    show: function () {
        console.log(this.animal); // note "this.animal"
    }
}

然后在testing1.js

代码语言:javascript
复制
'use strict';

var two = require('./testing2.js');

two.show(); // => Cat
two.animal = 'Dog'; // now replaces 'Cat'
two.show(); // => Dog
票数 3
EN

Stack Overflow用户

发布于 2016-08-02 19:36:04

我想我想出了我自己问题的答案。Javascript总是通过值传递变量,而不是引用-当然,除非它是一个对象或函数,其中的“值”是一个引用。当我将动物变量复制到module.exports.animal时,它实际上不是复制这个变量,而是复制单词"Cat“。更改导出变量不会影响原始动物变量。我没有在testing2.js中导出变量,而是创建了一个setter。导出设置器,并使用它而不是试图直接设置动物,使它的行为方式,我想。

测试1.js:

代码语言:javascript
复制
'use strict';
var two=require('./testing2');

two.show();
two.setAnimal('Dog');
two.show();

测试2.js:

代码语言:javascript
复制
'use strict';
var animal='Cat';

function show()
   {
   console.log(animal);
   }

function setAnimal(newAnimal)
   {
   animal=newAnimal;
   }

module.exports.setAnimal=setAnimal;
module.exports.show=show;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38728296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档