当你看到这样的代码时:
var spa = (function () {
..
..
return { initModule: initModule };
}());
有人可以解释一下return { initModule: initModule }
行吗?
答案 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
作为对象键名称。
答案 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
。