Подтвердить что ты не робот

Можно ли получить контекст вызывающего абонента в javascript?

var test = {
    demo: function(){
      //get the caller context here
    }
}
//when this gets called, the caller context should be window.
test.demo();

Я пробовал arguments.callee и arguments.callee.caller, и не повезло...

4b9b3361

Ответ 1

Так как ключевое слово this ссылается на ThisBinding в LexicalEnvironment, а javascript (или ECMAScript) не позволяет программному доступу к LexicalEnvironment (фактически, никакого программного доступа к целому Execution Context), поэтому невозможно, чтобы получить контекст вызывающего.

Кроме того, при попытке test.demo() в глобальном контексте должен быть не вызывающий вообще, ни прикрепленный контекст для вызывающего strong > , это всего лишь Глобальный код, а не вызывающий контекст.

Ответ 2

В контексте, я полагаю, вы имеете в виду this? Это зависит от того, как вызывается функция, а не от того, где она вызывается.

Например (с помощью консоли Webkit):

var test = {
    demo: function() {
        console.log(this);
    }
}
test.demo();    // logs the "test" object
var test2 = test.demo;
test2();        // logs "DOMWindow"
test.demo.apply("Cheese"); // logs "String"

Кстати, arguments.caller устарел.

Ответ 3

Значение ключевого слова this функции задается вызовом, это не "контекст". Функции имеют контекст выполнения, который включает в себя его значение. Это не определено this.

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