2016-03-20 4 views
0

Как я могу получить ссылку на объект, содержащий функцию, из ввода в форме objectReference ["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. Получение значения myObject

  2. Getting имя свойства, которое этот объект используется для обозначения функции

Значение перешедшей в aaa в вашем коде просто ссылка на функцию. Ссылка на объект не передается в 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 получит ссылку на функцию, которая, когда вызванный, вызовет исходную функцию с this со ссылкой на myObject. Так что aaa не может получить ссылку на объект, но он все равно может позвонить.

+1

спасибо, я надеюсь получить это, просто пройдя один параметр, но это невозможно. – Andrea

+0

@Andrea: Это может быть один аргумент, но это должно быть две части информации. Я добавил пример, который использует объект, поэтому это один аргумент, если это полезно. –

Смежные вопросы