Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
16 Апр 2023
2 мин
877

Вызов функции JavaScript по имени в виде строки

В JavaScript иногда встречается ситуация, когда необходимо вызвать функцию, имя которой передано в виде строки. Это может быть полезно, когда нужно динамически

В JavaScript иногда встречается ситуация, когда необходимо вызвать функцию, имя которой передано в виде строки. Это может быть полезно, когда нужно динамически вызывать различные функции в зависимости от определённых условий.

Рассмотрим такой пример. Предположим, есть несколько функций, выполняющих различные математические операции:

function add(a, b) {
    return a + b;
}

function subtract(a, b) {
    return a - b;
}

function multiply(a, b) {
    return a * b;
}

И хотелось бы вызывать эти функции динамически, в зависимости от входных данных.

Использование объекта window

В браузере все глобальные функции и переменные являются свойствами объекта window. Поэтому можно использовать его для вызова функции по имени в виде строки:

let funcName = 'add';
let result = window[funcName](5, 3);

В этом случае функция add будет вызвана, и result будет равен 8.

Использование функции eval

Другой способ — использовать функцию eval, которая выполняет строку JavaScript как код:

let funcName = 'add';
let result = eval(funcName)(5, 3);

Этот способ работает, однако он считается небезопасным и не рекомендуется к использованию, так как позволяет выполнять произвольный код.

Контекст функции

Если функция находится внутри объекта или пространства имен, то для её вызова потребуется указать контекст. Для этого можно использовать метод apply:

let namespace = {
    add: function(a, b) {
        return a + b;
    }
};

let funcName = 'add';
let result = namespace[funcName].apply(namespace, [5, 3]);

В этом примере apply вызывает функцию add в контексте объекта namespace, и result опять равен 8.

Таким образом, вызов функции по имени в виде строки в JavaScript можно осуществить несколькими способами. Главное — выбирать подходящий способ в зависимости от контекста и требований к безопасности.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий