2016-03-20 19 views
0

オブジェクト参照の取得は、オブジェクト参照["functionName"]という形式の入力から行うことができます。オブジェクト参照と関数名を取得

例:

function aaa(param) { 
    var objectReference = /*..???...*/; 
    var functionName = /*...???..*/; 

    // Now expected result is that objectReference contains 
    // a reference to myObject, and functionName contains a 
    // string with name of function (implemented in myObject), 
    // so I can invoke it with objectReference[functionName]() 
    // after some manipulation. 
} 

var myObject = new SomeFunction(); 

aaa(myObject["myFunction"]); 

はあなたが

+0

あなたの質問はまだ明確ではありません、さらに詳しくお教えください –

答えて

4

あなたが列挙されてきたことのいずれかを実行することはできませんありがとうございました。二つの別々のものがここにあります

  1. は、そのオブジェクトが値がaaaに渡された関数

を参照するために使用するプロパティの名前を取得myObject

  • を取得あなたのコードでは関数への参照に過ぎません。オブジェクトへの参照はaaaに渡されず、オブジェクトがその関数を参照するために使用したプロパティに関する情報もありません。どちらも、関数参照自体から推論することはできません。 (関数は、現代のJavaScriptエンジンにそのnameプロパティを経由してアクセスすることができを有していてもよいが、それはうまくオブジェクトは、それを参照するために使用されるプロパティの名前とは異なる場合があります。)

    でこれを行うには、あなたがそれらを個別に渡す必要があり、いずれかの個別の引数として:

    aaa(myObject, "myFunction"); 
    

    またはオブジェクト後者の場合

    aaa({obj: myObject, prop: "myFunction"}); 
    

    として、aaaは、次のようになります

    function aaa(info) { 
        // Use info.obj and info.prop here 
        // The call would be 
        info.obj[info.prop](); 
    } 
    

    別のオプション、あなたが本当に電話をかけるの目的以外のオブジェクト参照を必要としない場合は、Function#bindを使用することです:

    aaa(myObject["myFunction"].bind(myObject)); 
    

    aaaはとき、その関数のリファレンスを受け取りますと呼ばれる、myObjectを参照してthisで元の関数を呼び出します。したがって、aaaは実際にオブジェクト参照を取得できませんが、依然として呼び出しを行うことができます。

  • +1

    ありがとう、私はこれを取得することを望んで、1つのパラメータを渡すが、はっきりと可能ではありません。 – Andrea

    +0

    @アンドレア:1つの引数にすることができますが、2つの情報でなければなりません。オブジェクトを使用する例を追加しました。有用な場合には、それは1つの引数です。 –

    関連する問題