我知道可以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 = ???
}
我希望我在这里有道理...
编辑:这是我真正从事的工作的简化形式。请理解,我没有成熟的调试器或类似的东西。
我如何获取调用者函数在其上被调用的对象,即在那意味着什么?
你不能。this
只能从调用程序函数的范围访问该关键字,并且无法对其进行自省(除非您使用具有JS引擎访问权限的JS调试器)。
因此,您将需要以某种方式将其this
作为参数传递给函数,或寻找另一种方式使其可用(例如,作为全局变量)。这可以在调用者函数(setGlobal(this)
)或setGlobal(obj)
也知道该对象的调用者的调用者()中完成。如果您无法更改该代码,那是完全不可能的。
最后的手段是某种形式的旁通道攻击,即,当您知道可能的this
值集并知道调用方函数访问了哪些属性时,可以在这些属性上设置吸气剂,以将对象标识为“正在访问” 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句