今天早上我正在尝试使用javascript / jQuery,并试图捕获当前正在执行的函数的调用者名称。
因此,在下面的示例中,日志将runMe
显示为调用方,showMe
显示为被调用者。
jQuery(document).ready(function($) {
function showMe() {
// should log the runMe as the caller and showMe as callee
console.log('Callee: ',arguments.callee)
console.log('Caller: ',arguments.caller);
}
function runMe() {
// getting executed as a button is pressed.
showMe();
}
$('a').bind('click', function(e) {
e.preventDefault();
runMe();
});
});
以上显然不起作用,因此我向大家提问。
在上面的例子中有没有一个很好的方法来获得调用者?
请注意:我知道我可以获得runMe
的被调用者并将其作为参数传递给showMe
但是这个问题的目的是找到一个不需要调用者的解决方案被传递到'手动'功能。
是否有理由反对做这样的事情?
答案 0 :(得分:17)
您曾经能够arguments.caller.name
,但这是deprecated in Javascript 1.3。
arguments.callee.caller.name
(或仅showMe.caller.name
)是another way to go。在所有主流浏览器中都是non-standard, but currently supported。
答案 1 :(得分:3)
尝试callee.caller
这样的
function showMe() {
// should log the runMe as the caller and showMe as callee
console.log('Callee: ',arguments.callee.name)
console.log('Caller: ',arguments.callee.caller.name);
}
答案 2 :(得分:2)
这对你有用吗?
function showMe() {
// should log the runMe as the caller and showMe as callee
console.log('Callee: ',arguments.callee)
console.log('Caller: ',arguments.callee.caller);
}
注意,这是非标准的javascript。
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/caller
答案 3 :(得分:1)
我认为是......
arguments.callee.caller