否;它们是相同的
但是,如果添加new
事前和事后.something
,他们也会有所不同。
代码1
new (function() {
this.prop = 4;
})().prop;
此代码创建这个函数的类的新实例,然后获取新的实例的prop
财产。
它返回4
。
这相当于
function MyClass() {
this.prop = 4;
}
new MyClass().prop;
代码2
new (function() {
return { Class: function() { } };
}()).Class;
此代码调用Class
财产new
。
由于函数调用的圆括号位于外部圆括号内,因此它们不会被new
表达式拾取,而是会正常调用该函数,并返回其返回值。
new
表达式解析为.Class
并将其实例化。 (new
后的括号是可选的)
这相当于
var namespace = { Class: function() { } };
function getNamespace() { return namespace; }
new (getNamespace()).Class;
//Or,
new namespace.Class;
没有调用getNamespace()
周围的括号,这将被解析为(new getNamespace()).Class
—它会调用实例化getNamespace
类,并返回Class
财产的新实例。
另请参见[自动执行匿名JavaScript函数的括号位置?](http://stackoverflow.com/questions/3384504/location-of-parenthesis-for-auto-executing-anonymous-javascript-functions)或[函数(){...}())之间有区别吗?和(函数(){...})();?](http://stackoverflow.com/questions/3783007/is-there-a-difference-between-function-and-function) – Bergi 2013-10-23 20:29:57
只是当你认为一切都在JS不是你所期望的 - 它是。再次欺骗! js第一语言使用反向pschology! – 2013-11-07 15:53:15