在我的应用程序中,我有两个模块,它们都需要一个对象变量,但在它们中,它们稍微改变了它的内容:
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:"管理员面板"},尽管事实上,我只希望它在第二个模块中是这样的。 提前感谢您的帮助!
答案 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