【问题标题】:What’s the difference between the JavaScript module pattern and its alternatives?JavaScript 模块模式与其替代方案有什么区别?
【发布时间】:2012-07-16 09:04:03
【问题描述】:

实际上,以下两种模式之间的区别是什么?

一个

mySpace = mySpace || {}
mySpace.isObsolete = function() {};
mySpace.hipsterYear = 2006;

用法:

var iable = mySpace.isObsolete();
var year = mySpace.hipsterYear;

B(即模块模式)

mySpace = (function(){
  var obj = {};
  var someVar = 2012;
  obj.hipsterYear = 2006;
  obj.isObsolete: function() {};
  return obj;
}());

用法:

var iable = mySpace.isObsolete();
var year = mySpace.hipsterYear;

在 B 中,匿名函数创建了一个范围,其中 someVar 不能从外部访问。我想这样的构造在 A 中是不可能的? 因此,A 和 B 在创建范围方面有所不同。

在命名空间方面有什么区别? A 和 B 是等价的吗?

【问题讨论】:

    标签: javascript namespaces scope javascript-namespaces


    【解决方案1】:

    B 通常被称为“模块模式”,它允许选择使用面向对象的方法,对变量和方法进行公共和私有访问,而 A 一切都是公共的。 Douglas Crockford 解释得最好 here

    这通常是个好主意,因为使用 A 中的方法会使所有内容都容易受到其他代码/编码器的干扰。如果有人(可能是您)决定走捷径,这会增加出现隐蔽错误的可能性。

    【讨论】:

      猜你喜欢
      • 2018-03-14
      • 2016-03-03
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 2013-02-08
      • 2011-04-10
      • 2013-01-11
      相关资源
      最近更新 更多