Можно ли получить контекст вызывающего абонента в 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, и не повезло...
Ответ 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"
Значение ключевого слова this функции задается вызовом, это не "контекст". Функции имеют контекст выполнения, который включает в себя его значение. Это не определено this.
В любом случае, поскольку все функции имеют переменную this, которая является свойством ее объекта переменной, вы не можете ссылаться на любое другое ключевое слово this в области видимости, если оно не передано функции. Вы не можете напрямую обращаться к переменному объекту; вы зависимы от разрешения переменной в цепочке областей видимости, поэтому this всегда будет текущим контекстом выполнения this.