是否有可能在javascript中获取调用者上下文?

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

我尝试了arguments.calleearguments.callee.caller ,并没有运气…

由于this关键字在LexicalEnvironment ThisBinding ,并且JavaScript(或ECMAScript)不允许对LexicalEnvironment进行编程式访问(实​​际上,没有对整个Execution Context编程式访问),因此无法获取调用者的上下文。

另外,在全局上下文中尝试test.demo()时,根本不应该有调用者 ,也不应该给调用者附加上下文 ,这只是一个全局代码而不是调用上下文。

根据上下文,我假定你是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定义的。

在任何情况下,因为所有的函数都有一个thisvariables是它的variables对象的一个​​属性,除非它被传递给该函数,否则你不能在该作用域中引用其他任何关键字。 你不能直接访问variables对象; 你是依赖于范围链上的variables分解,所以this将永远是当前的执行上下文的this