JS - вызов функции по имени (в нотации объекта)

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

Я делаю более простой пример, и нет, я не пишу об игре. Но этот пример выглядит более понятным для объяснения моей проблемы.

character.sleep(1);
character.changeName(name);
character.useItm(1423);

Более простой пример:

object.function(parameters)

Цель была примерно такой:

myFunc(funcName,value) {
    character.{funcName}(value);
}

$('.btn_sleep') { myfunc('sleep','1'); }
$('.btn_cName') { myfunc('changeName','Harold'); }
$('.btn_uItem') { myfunc('useItem','1423'); }

Сначала я подумал об использовании eval(), потому что никакой пользовательский ввод не приблизится к этой функции. Но мне не нравится эта идея из-за потери производительности.

Затем я искал альтернативы и нашел window[] и новую функцию () в качестве решения.

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

Кто-нибудь может помочь?

1 ответ

Решение

Лучший способ, которым я знаю, как динамически вызывать функции, это использовать скобочные обозначения, потому что это позволяет вам задавать путь к объекту с помощью переменной

function myFunc(funcName,value) {
    character[funcName](value);
}

myfunc('sleep','1');
Другие вопросы по тегам