2017-02-28 143 views
1
function getClass(name) { 
    switch (name) { 
     case 'string': return String; 
     case 'array': return Array; 
     default: return Object; 
    } 
} 
obj = new (getClass()); 

所以任何人都可以解釋這些代碼,我明白新的但什麼是新的()?新增功能(getClass())是什麼意思?

+0

括號沒有做任何事情,他們只是用於分組的事情。這似乎是程序員的個人風格或過於謹慎(switch語句中也有不必要的括號。) – JJJ

+2

@JJJ錯誤。括號是確保'getClass'不帶參數被調用,然後在結果上調用'new',比如'String'。如果沒有括號,它會調用'getClass'函數本身作爲構造函數。 – 2017-02-28 12:15:18

+0

@torazaburo,你想回答這個問題嗎?它可以和'obj = new getClass()();'一起工作,這比其他風格更明顯。 –

回答

1
obj = new (getClass()); 

這意味着:

  1. 調用getClass功能不帶參數(getClass())。返回StringArrayObject,後者在這種情況下。

  2. 撥打電話new返回值爲getClass()。在這種情況下,這相當於new Object,它創建了一個新對象。

1

你可以使用

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; }