Javascript使用冒号返回

时间:2014-09-26 10:20:20

标签: javascript

当你看到这样的代码时:

var spa = (function () {
..
..


  return { initModule: initModule };
}());

有人可以解释一下return { initModule: initModule }行吗?

3 个答案:

答案 0 :(得分:0)

It's a revealing module pattern(好吧,差不多 - 你的语法有些错误)。您可以在函数中定义模块(包括所有“私有”方法和变量),然后返回一个仅包含API中所需方法的对象。在这种情况下,只有一种方法:spa.initModule()。

应该看起来像:

var spa = (function () {

  function initModule() {
    //do something
  }

  return { initModule: initModule };

}());

spa实际上是一个对象,而不是一个函数。该函数仅将模块API返回spa。因此,您在函数中定义initModule但要返回它,您需要将其作为对象中的值添加。假设您在spa上想要相同的方法名称,那么您也使用密钥名称initModule

您可以在演示中看到,在第二个示例中,我使用hallo作为对象键名称。

DEMO

答案 1 :(得分:0)

首先

(function () {})();是anoynomous函数,将在处理脚本时执行

{}是javascript中的对象literel

<强>总体

spa将包含对{ initModule: initModule }

的对象引用 无论设置什么,

spa.intiModule都会返回其值。如果initModule是函数引用,那么它将返回对函数的引用,你必须调用spa.intiModule()来执行它

答案 2 :(得分:0)

这是一个揭示模块模式。请参阅以下语法。

var spa = (function () {
..
..
  function initModule () {
      // Your code
   }

  function otherModule () {
      // Your code
   }

  return { initModule: initModule };
}());

spa对象中定义的每个变量函数都不能直接访问。 在模块模式中,如果我们将spa作为整个对象返回,那么我们将定义将返回哪些函数/变量。

因此,initModule的代码将是

spa.initModule = function () {};

在揭示模块模式时,我们只返回一个对象,其中包含使用spa对象的用户可用的所有变量和函数。

return { initModule: initModule }行实际上告诉spa对象在此模块外部可以使用名为initModule(第二次定义)的函数。第一次调用initModule是可以访问它的名称。

这相当于return { test: initModule }。现在,您可以致电spa.test()在其中执行initModule