Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:显示模块模式-访问内部对象与阵列?_Javascript_Scope_Private Members_Revealing Module Pattern - Fatal编程技术网

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()”,这是一个相当复杂的对象=/