使用显示模块模式,我如何提供对非静态私有变量的直接访问?这是我所拥有的:
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 的接口完好无损)。此外,对象没有的数组有什么特别之处,会导致这种行为?
真的很感谢任何见解,