Все функции можно хранить в объекте и передать куда надо. Но плохая идея... создавать кучу одинаковых функций. Можно же тот же 188 передать в качестве аргумента и как-то обрабатывать уже внутри функции.
https://jsfiddle.net/OPTlMUS/mes9cf1q/
Константин ЕфименкоГуру (3721)
4 года назад
Этого будет более чем достаточно, я не хочу проверять функцию на - "работает/не работает":
$(document).ready(function() {
var funcs = new Methods();
$('.btn').on('click', function() {
var num = 188,
func = funcs["filOrdFin" + num];
func();
});
});
function Methods()
{
var block = $('.result h1'),
count = 0;
this.filOrdFin188 = function()
{
block.text(`Ты нажал ${++count} раз`);
}
}
Тем не менее, такой способ работает только при условии, что я буду все именованные функции запускать внутри одного метода - Methods(). Но мне необходимо подгружать функции из разных файлов, обращаясь одному и тому же методу.
Как быть? Полагаю нужен цикл, чтобы пройтись по всем методам или что-то вроде того. Не представляю как это будет выглядеть...
Константин ЕфименкоГуру (3721)
4 года назад
При помощи этого кода, я вывел список всех функций документа:
obj = {
a: function(){
(function(global){console.log(global)})(Function('return this;')());
}
}
obj.a();
Этот эксперимент показал, что сколько бы я методов не объявил, одновременно виден будет лишь один из них. Но стоило мне в одном из файлов, сменить название метода, просто добавив цифру, он тут же появился в списке.
Это говорит о том, что в таком виде, будет невозможно пройтись циклом по всем методам. Можно ли как то, вызывать эти именованные функции из разных файлов (и соответственно скриптов)?
Константин ЕфименкоГуру (3721)
4 года назад
Вообщем я решил остановиться на этом варианте:
FilOrdFin188 = function(Pr1, Pr2, Pr3){}
eval('FilOrdFin'+Num+'(Pr1, Pr2, Pr3);');
Проблем с неработающими переменными не наблюдаю. В любом случае, спасибо за ваше решение, очень схоже с принципами построения плагина.
https://jsfiddle.net/fa513ejy/
Если исходить из этого примера, то у меня будут проблемы области видимости, ко всему прочему, на сколько я понимаю eval() является устаревшей функцией, которую не стоит применять.
Если написать new Function(), то конструктор мне сообщает, о том что для своей работы, он использует eval(). Вот и получается замкнутый круг.
Как мне вызвать функцию вида: название + изменяемое число?