nodejs将相同的变量传递给不同的模块

时间:2017-11-06 13:37:22

标签: javascript node.js object

在我的应用程序中,我有两个模块,它们都需要一个对象变量,但在它们中,它们稍微改变了它的内容:

In app.js

var example = {title: "test"};
var admin = require('./admin');
var research = require('./research');
admin.data(example);
research.data(example);
console.log(admin.get());
console.log(research.get());

In research.js

var datasnapshot = null;
module.exports = {data: updateData, get: getData};
function updateData(data) {
    datasnapshot = data;
}
function getData() {
    return datasnapshot
}

In admin.js

var datasnapshot = null;
module.exports = {data: updateData, get: getData};
function updateData(data) {
    datasnapshot = data;
    datasnapshot.title = "Admin Panel";
}
function getData() {
    return datasnapshot
}

问题是,botch console.log()返回给我{title:"管理员面板"},尽管事实上,我只希望它在第二个模块中是这样的。 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

问题是,botch console.log()返回我{title:“Admin   面板“}

因为将同一个对象传递给两个模块,所以当第二个模块更新该值时,它会反映在第一个模块中以及。

  

我只希望它在第二个模块中是这样的

如果要确保每个模块都应使用自己的示例对象副本,请将updateData方法修改为

//for research.js
function updateData(data) {
    datasnapshot = JSON.parse(JSON.stringify(data)); //deep copying the object
} 

//for admin.js
function updateData(data) {
    datasnapshot = JSON.parse(JSON.stringify(data)); 
    datasnapshot.title = "Admin Panel";
}

还有其他深度复制对象共享的方法here