Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вызов функции через переменную (https://javascript.ru/forum/misc/55588-vyzov-funkcii-cherez-peremennuyu.html)

Safort 11.05.2015 15:12

iNfantry,
скажем так, это не очень хорошо.

eval() нельзя использовать в strict mode.
И если у тебя есть однотипные функции, то можно запихнуть их в объект, это будет удобнее и в глобальное пространство имён мусорить не будешь.
var obj = {
  funcA: function() {},
  funcB: function() {},
  funcC: function() {},
};

//вызов
obj['funcA']();
//или так, если заранее знаешь имя
obj.funcA();

Erolast 11.05.2015 16:55

Цитата:

И если у тебя есть однотипные функции, то можно запихнуть их в объект, это будет удобнее и в глобальное пространство имён мусорить не будешь.
Аха, но я бы лучше сделал так:
var functions = {
  A: function() {},
  B: function() {},
  C: function() {}
};

functions["A"]();
functions["B"]();


Цитата:

Это плохо?
Да, потому что грязный хак. Банально - как это код будет минифицироваться и оптимизироваться?

Erolast 11.05.2015 17:00

Цитата:

eval() нельзя использовать в strict mode.
Почему? Вполне можно.
"use strict";

console.log(eval("1 + 1"));


Другое дело, что единственный кейс, где он должен применяться - это выполнение произвольного кода.

Safort 11.05.2015 17:10

Цитата:

Сообщение от drDocument (Сообщение 370245)
то есть, первый вариант можно использовать если не знаешь имени?

Да. В первом варианте показан пример обращения к свойству-функции через литерал строки. Ясно-понятно, что её можно динамически генерировать.

Safort 11.05.2015 17:13

Erolast,
Цитата:

Аха, но я бы лучше сделал так:
Согласен. Я просто показал ТС пример для его варианта.

Цитата:

Почему? Вполне можно.
Сорян братух, попутал берега ;(

iNfantry 11.05.2015 20:07

Да, про евал я понял, он мне и самому не нравится, а насчет списка функций да, согласен, что лучше какой-то промежуточный контейнер с этими функциями вместо глобального window. Именно этот вариант я и выбираю, всем спасибо)


Часовой пояс GMT +3, время: 05:44.