ハード変数文字列でオブジェクトを定義します..私はbasicly次の操作を実行したい:は説明するの
var doWhat = "speak";
var speak = {
hello: function() { alert: "Hello!"; }
};
// Won't work
doWhat.hello();
それは悪い例ですが、あなたは私が意味するものを得ることができるはずです。 どういうわけかできますか?
ハード変数文字列でオブジェクトを定義します..私はbasicly次の操作を実行したい:は説明するの
var doWhat = "speak";
var speak = {
hello: function() { alert: "Hello!"; }
};
// Won't work
doWhat.hello();
それは悪い例ですが、あなたは私が意味するものを得ることができるはずです。 どういうわけかできますか?
eval(doWhat).hello();
を使用できます。そのようにして、doWhat
の内容がオブジェクト参照に評価されます。
はい、これはうまくいきますが、 'eval()'は一般的には本当に悪いことです。根本的な問題を解決するための他の方法があります。 – Pointy
合意しましたが、改ざんが発生しないことを保証できる閉鎖環境では、evalを使用することはまだ安全です。 –
Mh、ありがとう。今、このメソッドを使ってオブジェクト変数を取得したいとき、私は何をしますか? obj.eval(str)は機能しません。:/ –
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.
ような何かを行うことができます。私たちがここで望んでいるのは、同じ「インターフェース」を持つ複数のオブジェクトを持ち、名前を使用しているオブジェクトのいずれかにオブジェクトをインスタンス化することです。 –
あなたが解決しようとしている根本的な問題は何ですか?言い換えれば、これは重要な障害であると感じるポイントにつながります。我々はいくつかのステップを取り戻すならば、あなたがする必要があることをするより慣れ親しんだ方法を提案することが可能かもしれません。 – Pointy
@MiladNaseriどのようにして有効な答えが何百万の重複のいずれかへの任意の有効な回答とまったく同じになります。あなたは '[]'アクセスか 'eval'を使います。ここには何も見ません。 – Esailija