4

我正在开发一个主干应用程序。

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

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

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

当我在同一个命名空间中时。我怎样才能避免重复。即当我在 App.Views.ViewName 中定义的函数中时如何调用 ModelName

目前我一直在重复完整的字符串,即 App.XXXX

谢谢

4

3 回答 3

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();   
}
于 2012-07-11T05:15:35.350 回答
2

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

因此,一种替代方法是使用,with尽管它有一些缺点。

但无论如何,请查看此示例:

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

window.test.b();
于 2012-07-11T05:14:02.027 回答
1

将它们作为参数传递怎么样?像这样的东西:

(function(aM,aV) {
    // use aM and aV internally
})(App.Models,App.Views);
于 2012-07-11T05:37:38.593 回答