Как уже упоминалось, это делается с помощью операторов доступа к свойствам - «[» и «]». В этом случае важно то, как объявлена эта функция и откуда на нее ссылаются.
Если он объявлен глобально (т. Е. В глобальной области видимости, как объявление функции или выражение функции) или назначен свойству глобального объекта в какой-то момент, то к нему можно получить доступ как к свойству. глобального объекта. В 3-м. редакции ECMAScript-262, можно получить доступ к глобальному объекту с помощью такого выражения, как:
(function(){ return this; })();
// or just `this` when in global scope
(Обратите внимание, что в браузерах глобальный объект обычно является тем же объектом, что и объект, на который ссылается global 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'];
person
kangax
schedule
20.09.2009