我正在尝试定义一个javascript命名空间,但在命名空间内我有对象是基本类的扩展(使用主干和下划线):
namespace = {
subspace: {
A: some_class.extend({...}),
B: A.extend({...})
}
}
但这会产生问题,因为尚未定义A. 在这种情况下,最佳做法是什么? 此外,我在这个命名空间中有多个子空间,后续的子空间不能引用前一个子空间。
namespace = {
subspace: {
A: some_class.extend({...}),
B: A.extend({...})
},
subspace2: {
some_function: function(){
<how do i create an instance of A for example? >
}
}
}
答案 0 :(得分:1)
您应该使用辅助函数来管理它。以下是来自&#34; JavaScript模式&#34; 的实施 Stoyan Stefanov 。
将应用程序全局对象视为MYAPP
。
和添加命名空间的功能:
MYAPP.namespace('MYAPP.modules.module1')
以下是namespace
方法的示例实现:
MYAPP.namespace = function(ns_string) {
var parts = ns_string.split('.'),
parent = MYAPP,
i;
if (parts[0] === 'MYAPP') {
parts = parts.slice(1);
}
for (i=0; i<parts.length; i++) {
if(typeof parent[parts[i]] === 'undefined') {
parent[parts[i]] = {}
}
parent = parent[parts[i]];
}
return parent;
}