2012-01-15 4 views
2

ハード変数文字列でオブジェクトを定義します..私はbasicly次の操作を実行したい:は説明するの

var doWhat = "speak"; 

var speak = { 
    hello: function() { alert: "Hello!"; } 
}; 

// Won't work 
doWhat.hello(); 

それは悪い例ですが、あなたは私が意味するものを得ることができるはずです。 どういうわけかできますか?

+0

ような何かを行うことができます。私たちがここで望んでいるのは、同じ「インターフェース」を持つ複数のオブジェクトを持ち、名前を使用しているオブジェクトのいずれかにオブジェクトをインスタンス化することです。 –

+0

あなたが解決しようとしている根本的な問題は何ですか?言い換えれば、これは重要な障害であると感じるポイントにつながります。我々はいくつかのステップを取り戻すならば、あなたがする必要があることをするより慣れ親しんだ方法を提案することが可能かもしれません。 – Pointy

+0

@MiladNaseriどのようにして有効な答えが何百万の重複のいずれかへの任意の有効な回答とまったく同じになります。あなたは '[]'アクセスか 'eval'を使います。ここには何も見ません。 – Esailija

答えて

1

eval(doWhat).hello();を使用できます。そのようにして、doWhatの内容がオブジェクト参照に評価されます。

+1

はい、これはうまくいきますが、 'eval()'は一般的には本当に悪いことです。根本的な問題を解決するための他の方法があります。 – Pointy

+0

合意しましたが、改ざんが発生しないことを保証できる閉鎖環境では、evalを使用することはまだ安全です。 –

+0

Mh、ありがとう。今、このメソッドを使ってオブジェクト変数を取得したいとき、私は何をしますか? obj.eval(str)は機能しません。:/ –

1

あなたは、私はあまりにも、それはそれらのいずれかだとは思わない

var doWhat = {}, str = "speak"; 

doWhat[str] = { 
    hello : function() {} 
}; 

doWhat[str].hello(); 
+1

...または 'doWhat [someVariable] .hello();' ... – Pointy

+0

はい、私は編集していました;) – stecb

0
jsName = 'PageIndexController'; 

//ST1 
eval("if(typeof jsName === 'undefined')alert(111);"); 

//ST1 
eval("if(typeof " + jsName + " === 'undefined')alert(222);"); 

//ST1 not work 
//ST2 work and the output: 222; 

//there are two different way using eval, we will get 2 different outcome.