你可以使用
object = new getClass()(); // object = new (getClass());
其更好地解釋什麼發生。它調用函數getClass
併爲新實例返回一個對象。
function getClass(name) {
switch (name) {
case 'string': return String;
case 'array': return Array;
default: return Object;
}
}
var typeObject = new getClass()(),
typeArray = new getClass('array')(),
typeString = new getClass('string')();
[typeObject, typeArray, typeString].forEach(function (o) {
console.log(typeof o);
if (typeof o === 'object') {
console.log('hasOwnProperty' in o);
console.log('splice' in o);
}
});
.as-console-wrapper { max-height: 100% !important; top: 0; }
括號沒有做任何事情,他們只是用於分組的事情。這似乎是程序員的個人風格或過於謹慎(switch語句中也有不必要的括號。) – JJJ
@JJJ錯誤。括號是確保'getClass'不帶參數被調用,然後在結果上調用'new',比如'String'。如果沒有括號,它會調用'getClass'函數本身作爲構造函數。 – 2017-02-28 12:15:18
@torazaburo,你想回答這個問題嗎?它可以和'obj = new getClass()();'一起工作,這比其他風格更明顯。 –