您的位置:首页 > Web前端 > JavaScript

[Javascript] arguments.callee.caller(如何知道到函数被谁调用了)

2012-02-10 14:28 381 查看
有人曾问过我,在JavaScript中是否有办法得到函数调用者的信息,就是说要知道调用某个函数的函数。当时我想既然在函数内部有arguments.callee,那么是否有arguments.caller呢?可惜的是当我在Firefox中试验时,这个值始终是undefined。另外,我发现ActionScript
3.0之前的版本有arguments.caller,但是在3.0中被拿掉了。我更加肯定地认为JavaScript中也不会有这个东西,于是告诉他:没办法。

最近偶然看到一篇文章,发现真正的caller属性长在function上,而不是arguments上。所以在函数内部可通过函数名.caller或者arguments.callee.caller取到调用者的信息。不过当函数在全局环境下调用时这个值是null。

比如:

function a(){

alert(a.caller);

alert(arguments.callee.caller);

}

function b(){

a();

}

b();

当我们在浏览器中执行这段代码时,可以看到结果:





这样我们就知道是b函数调用了a函数。

最后再说一个IE下奇怪的发现。在IE中,arguments.caller并不是undefined,也不是function,而是个object。但是遍历不到它任何属性,难道只是个{
}?那它是用来干什么用的呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: