这个javascript模块模式有什么优势?

时间:2014-04-11 09:36:00

标签: javascript design-patterns backbone.js

所以我现在已经编写了一个骨干应用程序,我的模块通常是这样构建的:

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程序员喜欢第二种方法作为一种固有的更好的模式吗?

1 个答案:

答案 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变量。