在javascript中确定调用函数

Nyl*_*ska 3 javascript callstack function

可能重复:
你如何在JavaScript中找到调用者函数?

如何在javascript函数中找到调用(调用堆栈中的前者)函数?

我想确定在onbeforeunload事件中前者被调用的函数是否是__doPostback.

Jam*_*are 15

每个函数都caller定义了一个属性.

来自https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function/caller:

function myFunc() {
    if (myFunc.caller == null) {
        return ("The function was called from the top!");
    } else
        return ("This function's caller was " + myFunc.caller);
    }
}
Run Code Online (Sandbox Code Playgroud)

Function.caller属性不是ECMA3标准的一部分,但它已在所有主流浏览器中实现,包括IE和Firefox.

如果您使用的是匿名函数,您仍然可以caller通过该arguments.calee属性访问该属性:

function() {
    if (arguments.callee.caller == null) {
        return ("The function was called from the top!");
    } else
        return ("This function's caller was " + arguments.callee.caller);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,此代码正在访问当前函数,然后caller在其上引用相同的非标准属性.这与直接使用不推荐使用的 arguments.caller属性不同,后者在某些现代浏览器中未实现.

  • `caller`不是ECMA3标准的一部分,但它**在所有主流浏览器中实现:IE,Firefox,Safari.在IE中使用应该是安全的. (4认同)
  • 请注意,`caller`是非标准属性.您的里程可能因浏览器而异. (2认同)