我有以下格式的命名空間,允許公共和私有成員:如何附加到從閉包創建的JavaScript命名空間?
function A() {
return('a');
}
namespace1 = (function() {
// private
namespace2 = (function() {
// private
prC = function() {
return(namespace1.puB() + 'c');
};
puC = function() {
return(prC());
};
// public
return({
puC: puC
});
})();
prB = function() {
return(A() + 'b');
};
puB = function() {
return(prB());
};
// public
return({
puB: puB,
namespace2: namespace2
});
})();
document.write('A() = '); try { document.write(A()); } catch (ex) { document.write('inaccessible'); }
document.write('<BR />');
document.write('namespace1.prB() = '); try { document.write(namespace1.prB()); } catch (ex) { document.write('inaccessible'); }
document.write('<BR />');
document.write('namespace1.puB() = '); try { document.write(namespace1.puB()); } catch (ex) { document.write('inaccessible'); }
document.write('<BR />');
document.write('namespace1.namespace2.prC() = '); try { document.write(namespace1.namespace2.prC()); } catch (ex) { document.write('inaccessible'); }
document.write('<BR />');
document.write('namespace1.namespace2.puC() = '); try { document.write(namespace1.namespace2.puC()); } catch (ex) { document.write('inaccessible'); }
輸出:
A() = a
namespace1.prB() = inaccessible
namespace1.puB() = ab
namespace1.namespace2.prC() = inaccessible
namespace1.namespace2.puC() = abc
我怎麼可能去公共和私有成員追加到這樣一個命名空間(IE :來自不同的文件)?
這只是一堆返回對象的自調用函數,問題是返回的對象不包含您試圖訪問的屬性,沒有這樣的東西來刪除JS中的私有或公有。要將更多方法添加到對象中,只需使用點或括號表示法進行操作,並且可以對函數進行原型設計。因爲你沒有用'var'關鍵字去掉這些變量,所以它們是全局變量,並且可以在窗口範圍內訪問,參見[** FIDDLE **](http://jsfiddle.net/qQtGA/1/) ??? – adeneo 2013-02-17 02:23:18
在你的上下文中,'prB()'根本不是私有的。它是全球性的。嘗試運行'prB()'! – Amberlamps 2013-02-17 02:33:13