所以我现在已经编写了一个骨干应用程序,我的模块通常是这样构建的:
var AppName = AppName || {};
AppName.Module = {};
AppName.Module.View = Backbone.View.extend({...});
AppName.Module.Model = Backbone.Model.extend({...});
但我最近偶然发现了这个模块模式:
var AppName = AppName || {};
AppName.Module = (function() {
var View = Backbone.View.extend({...});
var Model = Backbone.Model.extend({...});
return {
View: View,
Model: Model
}
})();
在第二种模式中,您可以定义" private"只能从Module范围访问的方法,但除此之外,在我看来,测试模式通常更难。有人可以向我解释为什么一些javascript程序员喜欢第二种方法作为一种固有的更好的模式吗?
答案 0 :(得分:3)
这是因为你可以使用私有变量。例如,我们可以使用模式来定义bob
并强制代码使用setName
函数来更改其名称(即,您无法通过直接访问它来更改值:
var bob = (function(){
var name = "Bob";
return {
setName: function(newName){
name = newName;
},
getName: function(){
return name;
}
}
}());
console.log(bob.getName()); // "Bob"
console.log(bob.name); // undefined
bob.setName("Bobby");
console.log(bob.getName()); // "Bobby"
通过立即执行函数定义,您将获得一个新的作用域,您可以使用它来隐藏itnernal变量。