Node.js module.exports更改主体变量

时间:2014-08-17 14:23:15

标签: node.js

当我调用方法时,即使我将指定另一个变量,变量的值也会改变。

app.js

var methods = require('./module');
var ObjectExample = {};
ObjectExample['name'] = 'NODE';
ObjectExample['array'] = [];
ObjectExample['array'].push(1);
methods.test1( ObjectExample );
methods.test2( ObjectExample );

module.js

module.exports.test1 = function( ObjectExample ){
    var parameters = ObjectExample;
    parameters['name'] = 'NODE.JS';
    parameters['array'][0] = 2;
};

module.exports.test2 = function( ObjectExample ){
    console.log( ObjectExample ); // {name:'NODE.JS', array:[2]}
};

为什么我可以在模块test2中执行此操作。

  

{name:'NODE',array:[1]}

2 个答案:

答案 0 :(得分:0)

这是您传递给两个函数的同一个对象。因此,当您在一个模块中更改它时,它会在此对象的所有迭代中永久更改。您可以克隆此对象以避免此类行为。

答案 1 :(得分:0)

设置类变量的值

module.exports.test1 = function( ObjectExample ){
    var parameters = ObjectExample;
    parameters['name'] = 'NODE.JS';
    parameters['array'][0] = 2;
    this.ObjectExample = parameters;
};