2016-03-20 15 views
0

Form nesnesinde bir işlevin bir nesnesini içeren nesneye yapılan başvuruyu nasıl alırım? Referans ["işlev adı"].Nesne başvurusu ve işlev adı al

Örnek:

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"]); 

Eğer

+0

sorunuz çok açık değil, lütfen daha fazla detaylandırın –

cevap

4

Sen listeledik öğelerin herhangi birini yapamaz ederiz. İki ayrı şeyler burada vardır:

  1. bu nesne değeri aaa geçirilen işlevi

başvurmak için kullandığı özelliğin adını alma myObject değerini

  • Alma kodunuzda sadece işlevin bir referansıdır. Nesneye yapılan başvuru aaa'a aktarılmamıştır, ne de nesnenin işleve başvurmak için kullandığı özellik hakkında herhangi bir bilgi yoktur. İşlevsel referansın kendisinden de çıkarılamaz veya türetilemez. (Işlev Modern JavaScript motorları üzerindeki name özellik aracılığıyla erişim olabilecek bir adı, olabilir, ama o kadar da iyi nesne ona ifade etmek için kullanılır özelliğinin adından farklı olabilir.)

    yılında sipariş ya ayrık argümanlar olarak, bunları ayrıca geçmek zorunda, bunu yapmak için:

    aaa(myObject, "myFunction"); 
    

    veya ikinci durumda bir nesne

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

    olarak, aaa gibi görünebilir Eğer gerçekten çağrıyı yapma amacı dışında nesne başvurusu gerekmiyorsa

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

    Diğer bir seçenek, Function#bind kullanmaktır:

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

    aaa bir işlev başvurusu alacaksınız, bu ne zaman çağrılır, myObject'a atıfta bulunan this ile orijinal işlevi çağırır. Yani aaa aslında nesne referansını alamıyor, ancak yine de çağrı yapabilir.

  • +1

    Teşekkürler, umarım bu sadece bir parametre geçirmeyi umarız, fakat açıkça mümkün değildir. – Andrea

    +0

    @Andrea: Bir argüman olabilir, ama iki bilgi parçası olmalı. Bir nesneyi kullanan bir örnek ekledim, bu yüzden yararlı olması durumunda tek bir argüman var. –

    İlgili konular