Выполнение функции по имени, передача объекта в качестве параметра
-
16-09-2019 - |
Вопрос
Вот проблема - я знаю функцию по имени (и эта функция уже была загружена из внешнего скрипта), но у меня нет реального объекта функции, доступного для вызова.Обычно я бы вызвал eval(имя_функции + "(arg1, arg2)"), но в моем случае мне нужно передать ему объект, а не строку.Простой пример:
var div = document.getElementById('myDiv')
var func = "function_name" -- this function expects a DOM element passed, not id
Как мне выполнить эту функцию?
Спасибо!Андрей
Решение
Вы должны иметь возможность получить объект функции с верхнего уровня. window
.Например.
var name = "function_name";
var func = window[name];
func( blah );
Другие советы
Никогда не используйте eval, это зло (см. разницу только в одной букве) Вы можете просто сделать:
var div = document.getElementById('myDiv');
var result = window[function_name](div);
Это возможно, потому что функции являются объектами первого класса в javascript, поэтому вы можете обращаться к ним так же, как и с любой другой переменной.Обратите внимание, что это также будет работать для функций, которым нужны строки или что-либо еще в качестве параметра:
var result = window[another_function_name]("string1", [1, "an array"]);