Как уже упоминалось, это делается с помощью операторов доступа к свойству - "[" и "]". В данном случае важно то, как эта функция объявлена и , где на нее ссылаются из .
Если оно объявлено глобально (то есть в глобальной области видимости, как объявление функции или выражение функции) или назначено свойству глобального объекта в некоторый момент, то к нему можно получить доступ как свойство глобального объекта. В 3-м. редакция ECMAScript-262, можно получить доступ к глобальному объекту с помощью выражения, такого как:
(function(){ return this; })();
// or just `this` when in global scope
(Обратите внимание, что в браузерах глобальный объект обычно является тем же объектом, на который ссылается глобальный window
, хотя это не обязательно должно быть так).
Таким образом, вы получите доступ к глобальной функции как:
var globalObj = (function(){ return this; })();
globalObj['your_func'];
// or via `window`
window['your_func'];
Проблема обычно возникает, когда функция объявлена локально - то есть в другом теле функции:
(function(){
function your_func(){};
// how to access `your_func` here?
});
Проблема, по сути, связана с тем, что, хотя есть возможность доступа к глобальному объекту (как в предыдущем примере), невозможно получить доступ к переменному объекту функции (т. Е. Объект, используемый в качестве «базы»). для объявления переменных и функций в коде функции).
Вы, конечно, можете использовать eval
в подобных случаях, но это, безусловно, неправильный подход к проблеме. Гораздо более простой, более совместимый и эффективный способ выполнения - это присоединение функции как свойства некоторого локального объекта :
(function(){
...
function your_func(){}
var funcs = { your_func: your_func };
...
})();
затем использовать те же скобки для доступа к свойству - рассматриваемая функция ссылки на свойство:
funcs['your_func'];