Javascript JS:显示模块模式-访问内部对象与阵列?
使用显示模块模式,如何提供对非静态私有变量的直接访问?以下是我所拥有的:Javascript JS:显示模块模式-访问内部对象与阵列?,javascript,scope,private-members,revealing-module-pattern,Javascript,Scope,Private Members,Revealing Module Pattern,使用显示模块模式,如何提供对非静态私有变量的直接访问?以下是我所拥有的: var M = function () { var obj = {}; var arr = []; var change = function () { obj = {"key":"if I see this, O is a reference to obj"}; arr.push("If I see this, A is a reference to arr")
var M = function () {
var obj = {};
var arr = [];
var change = function () {
obj = {"key":"if I see this, O is a reference to obj"};
arr.push("If I see this, A is a reference to arr")
};
return {
change: change,
O: obj,
A: arr
};
}();
M.change();
console.log(M.A); // prints ["If I see this, A is a reference to arr"]
console.log(M.O); // prints Object {}, wanted "if I see this, O..."
似乎A直接引用了arr,而O在初始化时指定了obj值的副本。如果obj是字符串、浮点或布尔值,我会理解其行为
当然,我可以通过公共get_obj方法公开obj,但我仍然很好奇这是否可以在没有其他帮助方法的情况下解决(我想保持与obj的接口完好无损)。此外,对象没有的数组有什么特别之处,导致了这种行为
真的很感谢你的见解
obj["key"] = "if I see this, O is a reference to obj";
您可以为
obj
设置键
属性,并保留对原始对象的引用。在change
中,您正在设置obj
变量的值,但在适当的位置修改arr
变量M.A
和M.O
是对arr
和obj
在该点保持的值的引用。更改obj
和arr
变量的值不会影响M
。没有复制。也许你是想做obj.key=“如果我看到这个…”代码>。如果您想重置整个obj
并且其中只有一个键/值对,您可以在其中循环并删除属性,然后使用.key=“如果我看到这个…”
啊,我看到了,更改O.key就成功了。在我的原始代码中,我有“O=d3.layout.force()”,这是一个相当复杂的对象=/