是否有可能在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
,并没有运气…
由于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
定义的。
在任何情况下,因为所有的函数都有一个this
variables是它的variables对象的一个属性,除非它被传递给该函数,否则你不能在该作用域中引用其他任何关键字。 你不能直接访问variables对象; 你是依赖于范围链上的variables分解,所以this
将永远是当前的执行上下文的this
。