Javascript定义模块方法分配

Javascript定义模块方法分配,javascript,module,namespaces,Javascript,Module,Namespaces,我试图将define模块方法添加到我的顶级名称空间,它首先定义名称空间。比如说, APP.define('modules.moduleName', function () { return {name: 'Module 1' }; }); 但在我的实施过程中,似乎出现了一个分配问题。下面是我的实现的一个简化示例 var APP = APP || {}; APP.namespace = function( nsString ) { var parts = nsString

我试图将define模块方法添加到我的顶级名称空间,它首先定义名称空间。比如说,

APP.define('modules.moduleName', function () { 
    return {name: 'Module 1' }; 
});
但在我的实施过程中,似乎出现了一个分配问题。下面是我的实现的一个简化示例

var APP = APP || {};
APP.namespace = function( nsString ) {

    var parts  = nsString.split('.'),
        parent = this,
        i;

    if (parts[0] === 'APP') {
        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;
};

// Simplified example of my define function
APP.define = function( name, definition ) {
    var namespace = APP.namespace( name );

    namespace     = definition();
    return namespace;
};

// Example Module
APP.define('modules.example', function () {

    return {
        name   : 'Application',
        module : 'APP.module'
    };
});

我缺少的对象引用或回调范围一定有什么内容。

当您将var namespace分配给APP.namespace(name)时,您通过引用获得名称空间的最后一部分,但该
namespace=definition()
只是将名称空间变量重新定义为
definition
函数的结果

你可以合并你的
APP.namespace
APP.define
,这样你的前一个父节点就可以将命名空间的最后一部分作为属性分配给
definition
函数

代码是:

var APP = APP || {};
APP.define = function( nsString, definition) {

    var parts  = nsString.split('.'),
        parent = this,
        i;

    if (parts[0] === 'APP') {
        parts = parts.slice(1);
    }

    for ( i = 0; i < parts.length - 1; i++ ) {
        if (typeof parent[parts[i]] === 'undefined') {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }

    parent[parts.pop()] = definition();
};
var-APP=APP | |{};
APP.define=函数(nsString,定义){
var parts=nsString.split('.'),
父=此,
我
如果(部分[0]=“应用程序”){
零件=零件。切片(1);
}
对于(i=0;i
如果(parts.length==0)返回,可能需要
if(parts[0]==“APP”)..
代码的一部分,但这是详细信息
var APP = APP || {};
APP.define = function( nsString, definition) {

    var parts  = nsString.split('.'),
        parent = this,
        i;

    if (parts[0] === 'APP') {
        parts = parts.slice(1);
    }

    for ( i = 0; i < parts.length - 1; i++ ) {
        if (typeof parent[parts[i]] === 'undefined') {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }

    parent[parts.pop()] = definition();
};