如何允许最终用户为此模式定义多个命名空间扩展级别
How to allow the end user to define multiple namespace-extension levels for this pattern?
以这段代码为例:
(function(foo) {
foo.init = function() {};
// other public/private methods here.
return foo;
}(window.FOO = window.FOO || {}));
我是这样称呼的:
FOO.init();
是否可以允许用户定义什么是FOO
?
换句话说,我需要允许多个window.FOO
实例;例如,像window.BILLY
和window.BAZ
(或者,它应该是window.billy.FOO
和window.baz.FOO
?)。
换句话说,有没有一种优雅的方法(允许用户)使用上述构造和初始化的变体来命名空间一个"命名空间"?
如果我
理解正确,您想更改上面的代码,以便FOO
的名称是动态的。您可以使用 [] 属性访问器执行此操作:
function initFoo(fooName) {
(function(foo) {
foo.init = function() {};
// other public/private methods here.
return foo;
}(window[fooName] = window[fooName] || {}));
}
initFoo('FOO');
initFoo('BILLY');
但我不确定这有什么意义,你的例子非常抽象。
首选
windows.billy.FOO
和windows.baz.FOO
。
通读 Addy Osmani 的基本 JS 命名空间模式以加快速度(最相关的部分:深度对象扩展)。
干杯!
你可能
想看看RequireJS: http://requirejs.org/docs/start.html
它可能具有您正在寻找的最终用户功能。
相关文章:
- 在javascript中使用命名空间
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 如何使用javascript命名空间
- js命名空间和变量范围
- html,js-如何限制元素"范围“-命名空间
- 转换自的JavaScript命名空间
- 命名空间与自调用函数
- 什么's当前命名空间/类中JavaScript子命名空间/类的语法
- 无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt
- jQuery命名空间和使用“;这个“;
- 如何使用 EmberJS 扩展命名空间
- TypeScript在命名空间下扩展JQuery
- 从内部扩展命名空间模块
- Firefox引导扩展:命名空间
- Firefox扩展警告:JavaScript命名空间污染
- 如何在javascript的命名空间中扩展类
- 使用文字符号扩展命名空间中的对象
- 命名空间QScriptEngine扩展
- 如何允许最终用户为此模式定义多个命名空间扩展级别