JS:揭示模块模式 - 访问内部对象与数组?

时间:2013-07-25 17:17:08

标签: 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")
        };
    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完整)。此外,对象没有的数组有什么特别之处,导致这种行为?

非常感谢任何见解,

1 个答案:

答案 0 :(得分:1)

obj["key"] = "if I see this, O is a reference to obj";

您可以为key设置obj属性,并保留对原始对象的引用。