JavaScript 模块模式与其替代方案有啥区别?

Posted

技术标签:

【中文标题】JavaScript 模块模式与其替代方案有啥区别?【英文标题】: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 是等价的吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于JavaScript 模块模式与其替代方案有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

桥接模式和策略模式有啥区别?

Servlet 过滤器和 Servlet 上下文侦听器有啥区别?

photoshop中的HSB模块,和RGB模块有啥区别呢?

将 object.constructor 与其构造函数和 instanceof 进行比较有啥区别? [复制]

在 Groovy 中,实例的元类与其类的元类有啥区别

工厂模式,简单工厂模式,抽象工厂模式三者有啥区别