数码资讯
[Javascript] arguments.callee.caller(如何知道到函数被谁调用了)
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
有人曾问过我,在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。但是遍历不到它任何属性,难道只是个{ }?那它是用来干什么用的呢?
最近偶然看到一篇文章,发现真正的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。但是遍历不到它任何属性,难道只是个{ }?那它是用来干什么用的呢?
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。