[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。但是遍历不到它任何属性,难道只是个{ }?那它是用来干什么用的呢?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值