Создание временных функций с динамически генерируемыми именами в jQuery

У меня есть внешний файл JavaScript, который загружается динамически, и он имеет oncomplete= переменная, которая увеличивает свое значение при каждом вызове. Например:

  • Первый раз: external.js? Oncomplete = sayHello1
  • Второй раз: external.js? Oncomplete = sayHello2
  • В третий раз: external.js? Oncomplete = sayHello3

Из-за этого мне нужно динамически создавать функции для выполнения обратного вызова oncomplete =. Это означает, что мне нужно создать функции с такими именами:

  • sayHello1 ();
  • sayHello2 ();
  • ...так далее

Это мой текущий код, который создает определенную функцию имени:

var sayHello = function (){
    console.log('hello');
};
sayHello();

Вопрос: как я могу создавать временные функции с динамически генерируемыми именами в jQuery?

1 ответ

Решение

Это более чистый вопрос javascript. Предполагая глобальную область (окно) для простоты,

var sayHello = function () { /* body */ };

эквивалентно

window['sayHello'] = function () { /* body */ };

Теперь, очевидно, вы не хотите загрязнять глобальную область видимости таким образом, поэтому вы можете сделать то же самое с любым другим объектом.

dynamicFunctions = {};

var oncomplete = 'sayHello1';
dynamicFunctions[oncomplete] = function () { console.log('hello'); };

dynamicFunctions[oncomplete]();
// outputs hello to the console

Однако следует помнить одну вещь: почему вы делаете это именно так? Поскольку я не уверен в ваших конкретных требованиях, есть ли причина, по которой вы не можете сделать что-то подобное?

// load external.js?oncomplete=sayHello&increment=4
sayHello(increment);
Другие вопросы по тегам