Вам понадобится, чтобы функция существовала как метод объекта, затем вы можете вызывать ее динамически с помощью скобочной нотации []
и передавать имя метода в виде строки в скобках в качестве индекса.Затем вы будете использовать оператор распространения ...
, чтобы объединить массив параметров в список с разделителями.
Другие показали это с глобальным window
в качестве родительского объекта, но (как мы знаем) глобальныекак правило, плохо, поэтому просто создайте свой собственный.
Ниже я показываю несколько методов и вариантов выбора параметров и прошу пользователя указать, какую комбинацию он хочет.Конечно, этот ввод может быть обработан многими другими способами.
// The methods must be stored in an object so that they can be accessed with
// bracket notation later.
let obj = {
method1: function foo1(p1, p2) {
console.log("method1 was called with: ", arguments);
},
method2: function foo1(p1, p2) {
console.log("method2 was called with: ", arguments);
},
params1: ['one', 'two'],
params2: ['three', 'four'],
};
// Get the user's desired invocation requirements:
let choice = prompt("Enter 'method1' or 'method2'");
let args = prompt("Enter 'params1' or 'params2'");
// Pass the method name (as a string) into the object to extract the
// value of that property. Then invoke it with () and look up the correct
// parameter property in the same way. Flatten the parameter array with the
// spread operator (...).
obj[choice](...obj[args]);