Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个javascript模块模式的优点是什么?_Javascript_Design Patterns_Backbone.js - Fatal编程技术网

这个javascript模块模式的优点是什么?

这个javascript模块模式的优点是什么?,javascript,design-patterns,backbone.js,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.Modul

因此,我已经编写了一段时间的主干应用程序,我的模块结构大致如下:

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
    }
})();

在第二种模式中,您可以定义只能从模块范围访问的“私有”方法,但除此之外,在我看来,这通常是一种更难测试的模式。有人能给我解释一下为什么一些javascript程序员喜欢第二种方法作为一种天生更好的模式吗?

这是因为可以使用私有变量。例如,我们可以使用该模式定义
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"

通过立即执行函数定义,您可以获得一个新的作用域,用于使用闭包“隐藏”内部变量。

“为什么第二种方法本质上是一种更好的模式?”看起来你已经下定决心了,你也为这个观点提供了一个理由。我的意思是,我在博客上看到过这样的文章,描述它是一种更好的模式,但我不明白为什么。我为clarityWell编辑了这篇文章,是的,因为它能够使用“私有”局部变量。