我正在开发骨干应用程序。
我在不同的文件中构建了我的模型+集合+视图。
这意味着像这样的解决方案
function() { // all my code }()
不适用于此处
我添加了名称空间,例如
App.ModelName App.Views.ViewName etc.
当我在同一名称空间内时。我怎么能避免重复它。 即当我在App.Views.ViewName
中定义的函数时,如何调用ModelName此刻我不断重复整个字符串,即App.XXXX
由于
答案 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);