如何避免在Javascript中重复命名空间

时间:2012-07-11 05:08:21

标签: javascript namespaces

我正在开发骨干应用程序。

我在不同的文件中构建了我的模型+集合+视图。

这意味着像这样的解决方案 function() { // all my code }()不适用于此处

我添加了名称空间,例如 App.ModelName App.Views.ViewName etc.

当我在同一名称空间内时。我怎么能避免重复它。 即当我在App.Views.ViewName

中定义的函数时,如何调用ModelName

此刻我不断重复整个字符串,即App.XXXX

由于

3 个答案:

答案 0 :(得分:5)

您有多种选择:

1)在每个函数中创建一个局部变量:

App.ModelName.myFunction = function() {
    var model = App.ModelName;
    // then you can reference just model
    model.myFunction2();
}

2)在每个文件范围中创建一个局部变量:

(function() {
    var model = App.ModelName;

    model.myFunction = function() {
        // then you can reference just model
        model.myFunction2();
    }


    // other functions here

})();

3)使用this

的值
App.ModelName.myFunction = function() {
    // call App.ModelName.myFunction2() if myFunction() was called normally
    this.myFunction2();   
}

答案 1 :(得分:2)

命名空间只是全局范围内的一个对象。

所以一种方法是使用with,尽管它有一些缺点。

但无论如何,看看这个样本:

window.test = {
    a: function(){ console.log(this); return 'x'; },
    b: function(){ with (this){ alert(a()); }}        // <- specifying (this)
};

window.test.b();

答案 2 :(得分:1)

如何将它们作为参数传递?像这样:

(function(aM,aV) {
    // use aM and aV internally
})(App.Models,App.Views);
相关问题