JavaScript命名空间对象:脚本包括顺序

时间:2014-08-14 11:22:52

标签: javascript javascript-objects javascript-namespaces

我似乎在JavaScript中遇到了名称间距问题。

我已将javascript objects分隔为单独的文件。

每个文件都以命名空间定义开头:

var MySystem = MySystem || {};

如果我包含对象,该对象调用文件中包含的对象的某些方法 - 我得到TypeError,说明给定的对象不存在。

我遇到的问题示例:

文件1 Url.js(首先包含在html文档中):

var MySystem = MySystem || {};

MySystem.Url = {

    objHelper : MySystem.Helper,

    init : function() {

        "use strict"

        if (this.objHelper.isEmpty('string')) {

            throw new Error('The string is empty');

        }

    }

}

文件2 Helper.js(在html文档中包含第二位):

var MySystem = MySystem || {};

MySystem.Helper = {

    isEmpty : function(thisValue) {

        "use strict"

        return (
            typeof thisValue === 'undefined' ||
            thisValue === false ||
            thisValue === null ||
            thisValue === ''
        );

    }

}

使用MySystem.Url.init();调用时,我得到:

TypeError: this.objHelper is undefined  
if (this.objHelper.isEmpty('string')) {

当我颠倒包含文件的顺序时 - 一切正常。

这显然是非常简单的示例,但我的系统包含更多objects - 所有这些都在他们自己的单独文件中。

这个问题的最佳解决方法是什么?

1 个答案:

答案 0 :(得分:0)

您尝试重新发明模块系统。使用require.js http://requirejs.org/