获取调用函数的对象

时间:2014-02-07 10:24:10

标签: javascript

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

我希望我在这里有意义......


编辑:这是一个非常简化的情况。我真正想要的是。请理解我没有一个完全成熟的调试器或类似的东西。

2 个答案:

答案 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将对象标识为“被访问”。