在 JavaScript 中,我可能会开始使用这样的顶级对象编写“库”或功能集合:
window.Lib = (function()
{
return {
// Define Lib here.
//
};
})();
我还可以添加一些Lib
用于创建与其相关的对象的函数:
window.Lib = (function()
{
return {
ObjectA: function()
{
var _a = 5;
return {
getA: function(){ return _a; }
};
},
ObjectB: function()
{
var _b = 2;
var _c = 1;
return {
getB: function(){ return _b; }
};
}
};
})();
这将像这样使用:
var thing = Lib.ObjectA();
var thing2 = Lib.ObjectA();
var thing3 = Lib.ObjectB();
我可以使用上面创建的每个方法中的方法来获取_a
定义范围内ObjectA()
或_b
定义范围内的值ObjectB()
:
alert(thing.getA()); // 5
alert(thing3.getB()); // 2
我想要实现的是:
假设我想访问该属性_c
(在 内定义ObjectB()
),但只能在Lib
. 我该怎么办?我的意思是,我想让属性在我在返回的对象中定义的任何函数中都可读Lib()
,但我不想在此之外公开这些值。
代码示例:
window.Lib = (function()
{
return {
ObjectA: function(){ ... },
ObjectB: function(){ ... },
assess: function(obj)
{
// Somehow get _c here.
alert( obj.getInternalC() );
}
};
})();
这会像这样工作:
var thing = Lib.ObjectB();
alert( thing.getInternalC() ) // error | null | no method named .getInternalC()
Lib.assess(thing); // 1
希望这是有道理的。