2012-01-31 187 views

回答

7

如果構造函數是全局定義...

var object = new window[objectName](); 

如果沒有,你需要使用evalFunction構造。在你這樣做之前,我會試着找到一種不同的方式去做你正在做的事情。

+0

+1 OP在他的例子中也需要正確的套管; 'var objectName =「Object」;' – 2012-01-31 15:22:38

+0

@AlexK .:你說得對,假設需要本地的'Object'構造函數。 – 2012-01-31 15:24:34

0

不,這不可能是你編碼的方式。但有一點變化......

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" 
1

你可以使用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); 

運行:http://jsfiddle.net/RxNsd/4/

+2

不要downvote這個答案。這是**本地**構造函數的唯一**解決方案。 – 2012-01-31 15:27:35

+1

@RobW同意,如果沒有合理的選擇使用eval來實現某種東西,那麼eval或eval-likes都可以=) – Esailija 2012-01-31 15:30:58

+0

當人們看到'eval'時就會嚇壞了。我不知道爲什麼。一個人也可以使用'Function'構造函數,但它仍然有效地評估字符串。 '函數('return new'+ objectName +'()')()' – 2012-01-31 15:35:39