【问题标题】:JavaScript function - Global NamespaceJavaScript 函数 - 全局命名空间
【发布时间】:2013-11-19 00:28:59
【问题描述】:

在Javascript中,存在一个继承Backbone Model的函数

window.MyModel = Backbone.Model.extend({ .. .. });
window.MyCollection = Backbone.Collection.extend({ .. .. });

在另一个JS文件中,我们访问这个函数

var MyModelInstance = new window.MyModel();

要求是,所有函数都需要以特定的全局命名空间(例如,公司名称“Google”)而不是通用关键字“窗口”作为前缀。我们如何实现它?

我尝试了以下方法,但没有成功。

var googleNameSpace= defineNamespace("Google");

googleNameSpace.MyModel = Backbone.Model.extend({ .. .. });
googleNameSpace.MyCollection = Backbone.Collection.extend({ .. .. });



var MyModelInstance = new Google.MyModel();

【问题讨论】:

    标签: javascript backbone.js javascript-namespaces


    【解决方案1】:

    在所有文件中首先添加这一行

    window.googleNameSpace = googleNameSpace || {};
    

    更新:好的,你需要 google 作为命名空间,然后像这样

    function defineNamespace(str) {
        window[str] = window[str] || {};
        return window[str];
    }
    
    
    
    googleNamespace = defineNamespace('Google');
    

    现在可以使用

    【讨论】:

    • 这看起来不错。但是,如果命名空间是“Google.Module1”呢?
    • 您可能需要编写更多代码..比如先拆分它们并继续逐字检查包...
    • 它不工作.. 给出错误,即“未捕获的类型错误:对象不是函数:20”。在第 20 行,我正在调用 var MyModelInstance = new Google.MyModel();跨度>
    【解决方案2】:

    你不需要在前面加上window,因为这是假设的。你可以定义

    window.myNamespace = Backbone.Model.extend({ .. .. });
    

    然后只引用它:

    myNameSpace.....
    

    例如

    window.myModule.helpers = {
        ....
    };
    

    可以被引用:

    myModule.helper.{{property/method}}
    

    【讨论】:

    • 它的抛出错误即'Uncaught TypeError: object is not a function:20'
    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2017-01-04
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多