2013-02-21 2 views
1

Как я могу получить доступ к контексту звонящего, если он был вызван из другой функции или даже кадра? Пример 1. Возможно ли вообще?Контекст функции вызова вызывающего абонента, не передающий его

var aaa = function(){ 
    (function(){console.log(ab)}).call(arguments.callee.caller); //fail 
} 
function bbb(){ 
    var ab = 'fff'; //defined in this function's context 
    aaa(); 
} 

Пример 2.

<html> 
    function someFunction(){ 
     //description on bottom 
    } 
    <iframe> 
     function() bbb(){parent.someFunction();} 
     bbb(); 
    </iframe> 
</html> 

Могу ли я получить объект Window функция идентификации вызывающего абонента без передачи его непосредственно SomeFunction? Я могу иметь несколько iframe, и все они вызовут someFunction.

ответ

2

Возможно ли вообще?

Вы можете получить ссылку на функцию вызывающего абонента, но вы никогда не сможете получить доступ к ее локальным переменным вне этой функции.

Могу ли я получить объект Window функции звонящего, не передавая его непосредственно функции someFunction? не

Нет. Там это не подвергается отношение между объектом функции и window объектом окружающей среды функция была определена в. Объект window является частью цепочки областей видимости функции, но вы не можете получить доступ к области видимости цепи.


быть явным, передача независимо от функции необходимо знать функции (литьевого зависимость). Это также упрощает тестирование ваших функций.

+0

Актуальная проблема непосредственно связана с примером 2. Ваш ответ заполнен, и я должен переписать код для решения моих проблем. – uzer

+0

Быть явным, передавать все функции, которые необходимо знать функции (* инъекция зависимостей *). Это также упрощает проверку кода. –

Смежные вопросы