2011-07-28 7 views
1

評価されているものがユーザ生成されていないので、evalやevalのない文字列 "getData"を実行する方が良いでしょうか?evalなしで文字列を実行していますか、ここで使用するにはeval okですか?

object.myMainObject(Marcus) 

object = { 
    Data = { 
     Marcus : function(){ 
      alert('marcus function') 
     }, 
     James : function(){ 
      alert('james function') 
     } 
    } 

    myMainObject : function(string){ 
     getData = "object.Data." + string + "()" 

     eval(getData) 
    } 
} 
+2

はい。少なくとも週に1回質問を受け取ります。私は、JavaScriptの初心者がすべてどこから来ているのか、なぜオブジェクトとしてそのような重要な基礎を教えられていないのだろうかと疑問に思う。 – delnan

答えて

4

evalだけ動的という名前のプロパティにアクセスするブラケット表記を使用し、この場合の全く不要ある:

var object = { 
    Data : { 
     Marcus : function(){ 
      alert('marcus function'); 
     }, 
     James : function(){ 
      alert('james function'); 
     } 
    } 

    myMainObject : function(string){ 
     var getData = object.Data[string](); 
    } 
}; 

object.myMainObject("Marcus"); // 'marcus function' 

  • Therあなたがobject:の代わりに=を使用していた)を定義していたときに構文エラーがありました。
  • objectまたはgetDataを宣言するにはvarステートメントを使用していませんでした。変数を宣言するときは、varステートメントを使用してください。そうしないと、グローバルオブジェクトのプロパティとして終了します。安全対策として
  • アクセスされているのメンバーがそれを呼び出す前に、実際には関数であれば、あなたがチェックできるが、例えば:

    //... 
    var getData; 
    if (typeof object.Data[string] == 'function') { 
        getData = object.Data[string](); 
    } 
    //... 
    
-1

評価するのは問題ありません。私は本当にあなたが達成しようとしていることを理解していませんが。

+0

それは評価するのが大丈夫じゃない(編集:私のdownvoteではない)。 'string ==" x; alert( 'har har')// "と考えてください。特に、より良い評価を得る評価のない方法があり、実際に入力して読むのが簡単です。 – delnan

+0

彼は関数の名前である文字列を渡して関数を実行したいようです。 :P – Trevor

+0

ええ、私は間違いなく何が起こっていたのか理解できませんでした。それでも、私は私の答えを他人に警告として残しておきます! –

2

はい、良い方法があります。名前によってオブジェクトのプロパティにアクセスするにはsquare bracket notationを使用します。

object.Data[string](); 
2

それをevalにOKではありません。

getData = object.Data[string]()

関連する問題