我在Chrome控制台中运行了以下一对代码段,结果相同:
test = new function(){
var a = 1;
var b = 2;
var c = 3;
this.debugBase = function(){console.log('' + a + b + c)};
};
test
debugBase: function (){console.log('' + a + b + c)}
__proto__: Object
对战:
test2 = new (function(){
var a = 1;
var b = 2;
var c = 3;
this.debugBase = function(){console.log('' + a + b + c)};
})();
test2
debugBase: function (){console.log('' + a + b + c)}
__proto__: Object
我错过了什么吗?函数后的括号有什么意义吗?如果没有,人们为什么要把它们放在那里?
答案 0 :(得分:13)
此处提出了类似的问题:new MyClass() vs. new MyClass。 Daniel Vassallo完整且接受的答案:
引用David Flanagan 1 :
作为一种特殊情况,对于
new
运算符,JavaScript通过允许在函数调用中没有参数时省略括号来简化语法。以下是使用new
运算符的一些示例:o = new Object; // Optional parenthesis omitted here d = new Date();
就个人而言,我总是使用括号,即使构造函数没有参数。
此外,如果省略括号,JSLint可能会伤害您的感受。它报告
Missing '()' invoking a constructor
,并且该工具似乎没有选项可以容忍括号内的遗漏。
1 David Flanagan:JavaScript the Definitive Guide: 4th Edition(第75页)
答案 1 :(得分:3)
因为您可以传递这样的参数,例如。
var x = new String(5); // '5'
除此之外,这是一个偏好的问题。
答案 2 :(得分:0)
放置parantheses实际上运行该函数。没有它们,函数就被定义了。
编辑:我没有注意到您使用的“新”关键字。无论哪种情况都会调用您的函数。但是,您通常不需要新的关键字。在你给出的例子中,它们基本相同,最后的括号是多余的。
请参阅此jsfiddle我的意思(http://jsfiddle.net/Gs2jH/)。
如果你运行它,你会看到只有第二个项目被调用。