2016-12-06 78 views
0

我使用類語法來定義幾個原型。在我的代碼中的某個點上,我必須創建一個新對象,但哪個對象完全依賴於原型名稱,該原型名稱作爲字符串存儲在變量中。如何創建一個新的對象,其超類型的名稱被分配給一個變量?

Calling a JavaScript function named in a variable有一個解決方案來調用一個函數時,它的名稱存儲在變量中,而不使用eval()。我怎樣才能達到同樣的東西,從這樣的原型創建一個對象,如parser = new VARIABLE_CONTAINING_PROTOTYPENAME

回答

2

不知道我是使用字符串表示類型的巨大粉絲,但我不知道你的用例,所以我不會判斷!

new原型基於字符串,你可能最好是去創建一個工廠函數:

function factory(name) { 
    switch (name) { 
     case "Object": 
      return new Object(); 
     case "Array": 
      return new Array(); 
     default: 
      return null; 
    } 
} 

var myObj = factory("Object"); 

或者,你可以創建一個對象,然後索引,它得到的構造:

var constructors = { 
    "Object": Object, 
    "Array": Array 
}; 

var myObj = new constructors["Object"]; 
+0

我必須承認,我不喜歡這種方法,雖然我沒有那麼有經驗來想另一種方法。用例如下所示:我在網站上使用'data-evnt-type'屬性對HTML元素進行了分類。當頁面加載時,JavaScript會查找具有這種屬性的每個元素,併爲其添加一個eventListener。當事件被觸發時,會創建一個解析器對象,但是該解析器對象依賴於包含部分解析器名稱的'data-evnt-type'屬性中的值。其實第二種解決方案就是我在這種方法中尋找的東西 –

+0

@CutúChiqueño:呃,這不是我見過的最詭異的東西,我想不出更好的方法來取代我的頭頂! –

相關問題