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
, и не повезло...
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
, и не повезло...
Так как ключевое слово this
ссылается на ThisBinding
в LexicalEnvironment
, а javascript (или ECMAScript) не позволяет программному доступу к LexicalEnvironment
(фактически, никакого программного доступа к целому Execution Context
), поэтому невозможно, чтобы получить контекст вызывающего.
Кроме того, при попытке test.demo()
в глобальном контексте должен быть не вызывающий вообще, ни прикрепленный контекст для вызывающего strong > , это всего лишь Глобальный код, а не вызывающий контекст.
В контексте, я полагаю, вы имеете в виду 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
устарел.
Значение ключевого слова this
функции задается вызовом, это не "контекст". Функции имеют контекст выполнения, который включает в себя его значение. Это не определено this
.
В любом случае, поскольку все функции имеют переменную this
, которая является свойством ее объекта переменной, вы не можете ссылаться на любое другое ключевое слово this
в области видимости, если оно не передано функции. Вы не можете напрямую обращаться к переменному объекту; вы зависимы от разрешения переменной в цепочке областей видимости, поэтому this
всегда будет текущим контекстом выполнения this
.