【发布时间】:2013-02-01 18:19:41
【问题描述】:
我有一个以下格式的命名空间,允许公共和私有成员:
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
如何将公共和私有成员都附加到这样的命名空间(即:来自不同文件)?
【问题讨论】:
-
这只是一堆返回对象的自调用函数,问题是返回的对象不包含您尝试访问的属性,没有清除某些私有或公共的东西JS。要向对象添加更多方法,您只需使用点或括号表示法即可,并且可以对函数进行原型化。由于您没有使用
var关键字清除这些变量,因此它们是全局的,并且可以在窗口范围内访问,请参见 FIDDLE ??? -
在您的上下文中,
prB()根本不是私有的。它是全球性的。尝试运行prB()!
标签: javascript namespaces javascript-namespaces