否;它們是相同的
但是,如果添加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