gpt4 book ai didi

javascript - 获取调用函数的对象

转载 作者:行者123 更新时间:2023-11-28 08:32:55 25 4
gpt4 key购买 nike

我知道我可以使用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 = ???
}

我希望我在这里说得有道理......

<小时/>

编辑:这是我真正所处的非常简单的情况。请理解我没有成熟的调试器或类似的东西。

最佳答案

how do I get the object on which the caller function was called on, i.e. what this means in there?

你不能。 this 关键字只能从调用者函数的范围内访问,并且无法进行内省(introspection)(除非您使用可以访问 JS 引擎的 JS 调试器)。

因此,您需要以某种方式将 this 作为参数传递给您的函数,或者找到另一种方法使其可用(例如作为全局变量)。这可以在调用者函数 (setGlobal(this)) 中完成,也可以在也知道该对象的调用者的调用者 (setGlobal(obj)) 中完成。如果您无法更改该代码,则完全不可能。

最后的手段是某种旁路攻击,即当您知道可能的 this 值的集合并知道调用者函数访问它的属性时,您可以在这些属性上设置 getter将对象标识为“正在访问”的属性。

关于javascript - 获取调用函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com