这是模块模式:
var module1 = (function(){
// private variable
var private_var;
// private method
var private_method = function(){
// ...
}
// public interface
return {
// A public variable
publicVar: "foo",
// A public function utilizing privates
publicMethod: function( bar ) {
// ..
}
})()
我发现了一个类似的模式,其中返回值不是一个对象而是一个函数:
var module2 = (function(){
// private variable
var private_var;
// private method
var private_method = function(){
// ...
}
// this is supposed to be a shortcut for me.doThings
var me = function (options) {
me.doThings(options);
}
me.doThings = function(options) {
// do something
}
// returns a function instead of an object
return me;
})()
这样使用:module2(options)
。
me
实际上是 me.doThings
函数的快捷方式。
我很困惑这是否可以被视为模块模式。 module1
和 module2
最佳答案
我认为您说明的两种方法都是模块模式,因为您在两种情况下都返回一个对象(记住函数是对象,也可以有属性)。
module2
中的示例在您想要返回可能也具有属性的主构造函数时很有用。这种特殊的构造在使用相同通用模块概念的节点模块中经常使用(在创建模块时语法略有不同,但原理相同)。没有必要使用这个结构,因为函数总是可以只是主对象的一个属性,但如果模块所做的只是定义一个函数,它有时会导致更短、更紧凑的代码。
关于design-patterns - 返回函数的 Javascript 模块模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27158361/