【问题标题】:Passing arguments into the revealing Module pattern in Javascript将参数传递给 Javascript 中的模块模式
【发布时间】:2017-04-14 11:44:20
【问题描述】:

在 JavaScript 中实现 Revealing 模块模式时,如何将参数传递给函数。我有一个这样的模块

var GlobalModule = (function() {
    function consoleLog(textToOutput) {
        console.log(textToOutput);
    }

    return {
        consoleLog: consoleLog()
    };
})();

稍后,当我运行GlobalModule.consoleLog("Dummy text"); 时,我得到undefined 作为输出。

【问题讨论】:

    标签: javascript design-patterns revealing-module-pattern


    【解决方案1】:
    return {
        consoleLog: consoleLog()
    };
    

    你的那部分代码是错误的。 由于函数末尾的 () 您要导出函数本身,因此您正在导出 consoleLog 调用的结果。 所以只需删除函数调用:

    return {
        consoleLog: consoleLog
    };
    

    【讨论】:

      【解决方案2】:

      在返回对象中处理函数

      var GlobalModule = (function() {
        return {
          consoleLog: function(textToOutput)
          {
           console.log(textToOutput);
          }
        }
      })();
      
      GlobalModule.consoleLog("Dummy text");

      只需像这样实现相同的输出。 object => function call .不需要返回对象

       var GlobalModule ={
              consoleLog: function(textToOutput) {
                                          console.log(textToOutput);
                                        }
            }
      
          GlobalModule.consoleLog("Dummy text");

      【讨论】:

      • 但是如果你不想调用模块的方法或属性怎么办,即我想做myRevealingModule('my-string'),而不是myRevealingModule.doSomething('my-string')
      • @RonRoyston 你需要一个直接的函数调用。see this fiddle
      【解决方案3】:

      换行

      consoleLog: consoleLog()
      

      consoleLog: consoleLog
      

      甚至(es6)到:

      consoleLog
      

      【讨论】:

        【解决方案4】:

        你可以这样做

        var GlobalModule = (function() {
            function consoleLog(textToOutput) {
                console.log(textToOutput);
            }
        
            return {
                consoleLog: consoleLog // () is removed otherwise it will execute immediately
            };
        })();
        
        GlobalModule.consoleLog('Hello')
        

        DEMO

        你要传递一个全局变量,把它放在IIFE的括号里

        var GlobalModule = (function(x) {
            function consoleLog(textToOutput) {
                console.log(textToOutput,x); // will log Hello temp
            }
           return {
                consoleLog: consoleLog
            };
        })('temp');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-12-01
          • 2011-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-17
          相关资源
          最近更新 更多