javascript эквивалент PHP-вызова call_user_func ()

Кто-нибудь знает, есть ли он?

Я хочу вызвать функцию, используя имя переменной.


редактировать:

Я написал здесь скрипку с тем, что я пытаюсь сделать:

http://jsfiddle.net/sAzPA/

<div id="some"> ... </div> 

ЯШ:

 (function($){ $.fn.MyPlugin = function(){ return this.each(function(){ var somefunction = function(arg1, arg2){ alert(arg1); }, someotherfunction = function(arg1, arg2){ alert(arg2); }, reallyimportantfunction = function(arg1, arg2){ var foo = $(this).attr('id') + 'function'; // here I want to call the function with the foo value as name, and pass it arg1 and arg2 $()[foo](arg1, arg2); // <- doesn't work }; reallyimportantfunction(); }); }; })(jQuery); jQuery(function($){ $('#some').MyPlugin (); }); 

Если функция определена на глобальном уровне, она автоматически становится дочерним элементом window .

Поэтому вы всегда можете вызвать window.functionName(); в любом месте, которое вы обычно вызываете functionName(); ,

Кроме того, поскольку в Javascript-объектах работают как ассоциативные массивы, вы можете вызывать любой дочерний объект любого объекта с использованием синтаксиса массива следующим образом: object['childName'] . Сюда входят функции, поэтому вы можете сделать object['functionName'](); для любой функции, являющейся членом объекта.

Объединив эти две точки вместе, вы можете вызвать любую глобально определенную функцию, например:

 window['functionName'](); 

И так как functionName в приведенном выше примере представляет собой строку, вы можете использовать переменную в этих скобках, что означает, что у вас есть те же функциональные возможности, что и call_user_func() PHP.

[РЕДАКТИРОВАТЬ]

Как я уже сказал, это работает для любого объекта. В комментариях OP указано, что функции, которые он хочет использовать таким образом, находятся в подключаемом модуле JQuery. Поэтому они, вероятно, будут частью объекта JQuery и обычно называются так: JQuery().functionName(); (или с помощью $ вместо JQuery ).

Синтаксис Javascript позволяет нам использовать ['functionName']() в любом месте, где мы можем использовать .functionName() , поэтому, принимая приведенный выше пример JQuery, мы могли бы изменить его так, чтобы он выглядел следующим образом:

 JQuery()['functionName']();` 

Но этот метод может быть адаптирован для любого объекта Javascript. В любом месте, где вы используете .functionName() , его можно заменить на ['functionName']() .

 var a = function(foo) {console.log(foo);} a.call(null, 'test'); a('test'); 

Существует немало способов достижения этого. Самый быстрый и способный (и небезопасный!) Способ сделать (PS: fnName в приведенных ниже примерах – это имя функции, сохраненной как строка)

 eval(fnName) 

Однако вы также можете

  this[fnName]();//careful with "this" though. Try replacing with "window" if it doesnt work for you 

или вызвать его путем передачи аргументов

 this[fnName].apply(contextObject,argumentArray) //contextObject will be objest which will be referenced by the keyword "this" within the function body (fnName's body), argumentArrayy is the array of arguments you want to pass to function.