可能重複:
create object from dynamic classname - ReflectionClass in JS?動態創建JavaScript對象?
是否有可能做到這一點在JavaScript?
var objectName = "object";
var object = new objectName();
或沿着這些線路的東西嗎?
可能重複:
create object from dynamic classname - ReflectionClass in JS?動態創建JavaScript對象?
是否有可能做到這一點在JavaScript?
var objectName = "object";
var object = new objectName();
或沿着這些線路的東西嗎?
如果構造函數是全局定義...
var object = new window[objectName]();
如果沒有,你需要使用eval
或Function
構造。在你這樣做之前,我會試着找到一種不同的方式去做你正在做的事情。
+1 OP在他的例子中也需要正確的套管; 'var objectName =「Object」;' – 2012-01-31 15:22:38
@AlexK .:你說得對,假設需要本地的'Object'構造函數。 – 2012-01-31 15:24:34
不,這不可能是你編碼的方式。但有一點變化......
var object = { objectName: "object" };
alert(object.objectName); // Pops up "object"
如果你更喜歡new
語法,必須存在一個構造函數。
function ObjectName(name) // This is the "constructor" function
{
this.objectName = name;
}
var object = new ObjectName("object");
alert(object.objectName); // Pops up "object"
你可以使用eval()來實現。 Eval基本上解釋了一個字符串,就像它是一個腳本行一樣。儘管如此,一些開發人員認爲這對日常使用是一種危險的功能,而其他人則不這樣做。閱讀更多here。使用eval(校正的)代碼的
實施例:
var objectName = "Object";
var object = new (eval(objectName));
eval("object.name = \"Nice!\""); // you don't need this, just an example of eval capabilities
document.write(object.name);
不要downvote這個答案。這是**本地**構造函數的唯一**解決方案。 – 2012-01-31 15:27:35
@RobW同意,如果沒有合理的選擇使用eval來實現某種東西,那麼eval或eval-likes都可以=) – Esailija 2012-01-31 15:30:58
當人們看到'eval'時就會嚇壞了。我不知道爲什麼。一個人也可以使用'Function'構造函數,但它仍然有效地評估字符串。 '函數('return new'+ objectName +'()')()' – 2012-01-31 15:35:39
由於不是我正在指出,是的,在一定程度上。不過爲什麼你需要這個呢? – Ryan 2012-01-31 15:20:37
更好地使用工廠創建對象。 – dfsq 2012-01-31 15:25:59