Vad*_*Vad 5 javascript constructor function
我见过在 JavaScript 中创建匿名构造函数的语法:
var Application = Application || {};
!function(window, Application) {
Application.property = {/*...*/}
Application.method = function(){/*...*/}
}(window, Application);
Run Code Online (Sandbox Code Playgroud)
我想了解以下部分:
var o = o || {};使用第一行(即)与仅说明相比有什么优势var o = (function(){})();?!用在函数前面?windowor作为参数?Application4a)
var Application = {
property: {},
method: function(){}
}
Run Code Online (Sandbox Code Playgroud)
或 4b)
var Application = (function() {
var method = function(){/*...*/}
return {method:method};
}());
Run Code Online (Sandbox Code Playgroud)
第一行是确保Application始终存在,通常用于预期Application应该存在的情况,并且该函数只是增强现有对象。如果它不存在,这可以确保我们在访问未定义的属性时不会收到错误。Application您的示例仅在还不存在的情况下等效。在所有其他情况下,您的代码将消除现有的Application,这几乎肯定不是意图。
Vatev 的评论解释了它的作用!。这是使相关函数成为自执行匿名函数的另一种语法。(顺便说一句,它还获取函数的返回值 - 当前为undefined,并翻转其真实性,因此计算结果为 true。不过,由于结果未存储在任何变量中,这显然不是目的。)
最后,为什么将windowand传递Application到函数中并在那里使用它?这是一项安全功能,以防其他代码更改window或Application稍后更改。它保证在匿名函数中,window并且Application正是您所期望的。在您给出的速记示例中,这可能看起来并不重要 - 毕竟,如果您立即使用这些变量而不存储它们,为什么要保护它们呢?在许多情况下,您从该函数返回一些内容,然后将window和Application存储在闭包中,因此您将保留变量。这使得后来决定说出来的人感到安全Application = {...}。