javascript命名空间定义自引用

时间:2014-08-23 00:00:47

标签: javascript design-patterns backbone.js underscore.js

我正在尝试定义一个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? > 
        }
    }
}

1 个答案:

答案 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;
}