是否可以使用字符串創建新對象? 例如,如何將字符串「product」轉換爲var p = new Product
?從字符串創建對象
在此先感謝。
編輯
我想要做的是有一個菜單<a href="#home"></a><a href="#products">products</a>
從HREF每次創建相應的對象。
是否可以使用字符串創建新對象? 例如,如何將字符串「product」轉換爲var p = new Product
?從字符串創建對象
在此先感謝。
編輯
我想要做的是有一個菜單<a href="#home"></a><a href="#products">products</a>
從HREF每次創建相應的對象。
如果你知道上下文,是的。假設您在瀏覽器環境中,並且Person
是全局構造函數。因爲任何全局變量是全局對象的屬性,這意味着你可以通過全局對象window
訪問Person
:
var p = new Person()
等同於:
var p = new window.Person()
所以,你可以用方括號符號:
var p = new window["Person"]();
當然這對每一種物體都是有效的。如果你不想污染全球範圍內,你可以有:
var mynamespace = {};
mynamespace.Person = function Person() {..}
var p = new mynamespace["Person"]();
這是比我的更好的解決方案+1 – 2012-03-21 11:57:11
我嘗試使用新窗口[「Namespace.MyClass」]()創建對象,但看起來不起作用。我們如何在類包含模塊時創建對象? – 2014-01-09 15:50:07
@NarendraV嘗試新窗口[「命名空間」] [「MyClass」]()?(這只是一個猜測,我不知道這會起作用) – 2014-01-10 11:53:27
那麼你總是可以使用可怕的不安全和illadvised eval()。 例如
var myStr = "Product"
var p = eval("new " + myStr + "()");
,或者可能是:
var myStr = "Product"
eval("var p = new " + myStr + "()");
但它充滿了潛在的漏洞,特別是如果字符串是從用戶輸入的到來。
嘗試在eval中搜索「use strict」 – Joseph 2012-03-21 11:50:00
這可以通過名稱 - >構造函數映射更好地解決。 – 2012-03-21 11:54:01
+1當程序生成輸入時,完美 – smirkingman 2013-05-02 19:41:22
只是另一種實現方式:
var nameOfThang = 'Person';
var nameOfThingzName = 'The Dude';
var thangs = { Person: {name: 'Legowski'}, Cars: {} };
var person = new (eval(thangs[nameOfThang].constructor))();
person.name = new (eval(thangs.Person.name.constructor))(nameOfThingzName) .toString();
console.log('@thang, #Person', person);
你希望用它做什麼? – Joseph 2012-03-21 11:44:02
將'product'轉換爲'var p = new Product'的規則是什麼?我可以理解'新產品',但爲什麼'p'? – 2012-03-21 11:44:31
@christ:這聽起來很危險,特別是如果字符串來自用戶...爲什麼你認爲這是一個好主意?你有沒有考慮過其他方法? – 2012-03-21 11:44:55