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 上下文侦听器有啥区别?