2012-01-31 7 views
1

可能性の重複:
create object from dynamic classname - ReflectionClass in JS?javascriptでオブジェクトを動的に作成しますか?

はそれがJavaScriptでこれを行うことは可能ですか?

var objectName = "object"; 
var object = new objectName(); 

またはこれらの行に沿ったものはありますか?

+0

としては、私はある程度、はい、指摘していないです。なぜあなたはこれを必要としますか? – Ryan

+0

Factoryを使用してオブジェクトを作成する方がよい。 – dfsq

答えて

7

コンストラクタがグローバルに定義されている場合は

var object = new window[objectName](); 

ない場合は...、あなたはevalFunctionコンストラクタを使用する必要があるだろう。あなたがそれをする前に、私はあなたがやっていることをするための別の方法を見つけることを試みるでしょう。

+0

+1 OPは彼の例でも正しいケーシングを必要とするでしょう。 'var objectName =" Object ";' –

+0

@AlexK .:ネイティブの 'Object'コンストラクタが必要であると仮定して、そうです。 –

0

いいえ、コード化の方法はありません。しかし少し変更を加えて...

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しないでください。 **ローカル**コンストラクタのための** only **ソリューションです。 –

+1

@RobWは同意します。何かを達成するためにevalを使用することに合理的な選択肢がない場合、evalやeval-likesはきれいです)=== – Esailija

+0

'eval'と表示されたときに人が狂ってしまいます。どうしてか分かりません。また、 'Function'コンストラクタを使用することもできますが、それでも有効に文字列を評価します。 'Function'( 'return new' + objectName + '()')() ' –

関連する問題