我知道我可以使用arguments.callee.caller.name
来获取调用函数的名称,但是如何获取调用函数的对象,即this
在那里的含义?
我想知道这是因为它是关于我调用apply()
的函数来为另一个对象调用它。
示例:在我的代码的某些部分
function myFunc(param1, param2) {
myComplexObject.someFunc();
}
myFunc.call(obj, param1, param2);
现在我想在myComplexObject.someFunc()
中编写代码并以某种方式从上面找到obj
:
function someFunc() {
var callerFuncName = arguments.callee.caller.name;
var callerFuncObj = ???
}
我希望我在这里有意义......
编辑:这是一个非常简化的情况。我真正想要的是。请理解我没有一个完全成熟的调试器或类似的东西。
答案 0 :(得分:0)
好的,我有点困惑 - 希望现在我知道你要做什么。这个怎么样,它不干净,但是因为你真的试图在这里做一点翻筋斗,它可能适合你:
var f1temp;
function f1(){
f1temp = this;
f2();
}
function f2(){
console.log(f1temp.num);
}
var a = { num:2 };
f1.call(a);
将导致2
。因此,您可以访问所演示的对象。
编辑:好的,这是怎么回事:
function f1(){
Function.prototype.temp = this;
f2();
}
function f2(){
console.log(Function.prototype.temp.num);
}
var a = { num:2 };
f1.call(a);
答案 1 :(得分:0)
如何获取调用调用函数的对象,即这意味着什么?
你做不到。 this
关键字只能从调用函数的范围访问,并且无法对其进行内省(除非您使用JS调试器访问JS引擎)。
因此,您需要以某种方式将this
作为参数传递给您的函数,或者找到另一种方法使其可用(例如作为全局变量)。这可以在调用者函数(setGlobal(this)
)中或在也知道该对象的调用者的调用者(setGlobal(obj)
)中完成。如果您无法更改该代码,则完全不可能。
最后的手段是某种旁道攻击,即当您知道可能的this
值集并知道调用函数访问它的属性时,您可以在这些属性上设置getter将对象标识为“被访问”。