design-patterns - 返回函数的 Javascript 模块模式

标签 design-patterns javascript

这是模块模式:

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 函数的快捷方式。
我很困惑这是否可以被视为模块模式。 module1module2

之间的主要区别和用例是什么

最佳答案

我认为您说明的两种方法都是模块模式,因为您在两种情况下都返回一个对象(记住函数是对象,也可以有属性)。

module2 中的示例在您想要返回可能也具有属性的主构造函数时很有用。这种特殊的构造在使用相同通用模块概念的节点模块中经常使用(在创建模块时语法略有不同,但原理相同)。没有必要使用这个结构,因为函数总是可以只是主对象的一个​​属性,但如果模块所做的只是定义一个函数,它有时会导致更短、更紧凑的代码。

关于design-patterns - 返回函数的 Javascript 模块模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27158361/

相关文章:

java - 设置对象参数并避免重复代码的最佳实践是什么?

javascript - jQuery 动画修改

javascript - 从 json 文件中选择一个特定的数组

java - 如何设计一个对域对象进行大量操作的 API 包装器? (需要指导)

design-patterns - 有人可以批评我的工厂模式吗?

c - 用 C 语言设计一个简单的 GUI 框架

javascript - append 新键并更改 for/if 循环中的值

Javascript 数组长度不变

用于固定菜单位置的 Javascript Scrolltop

.net - .NET 中使用的适配器模式在哪里?