在javascript中确定调用函数[重复]

Posted

技术标签:

【中文标题】在javascript中确定调用函数[重复]【英文标题】:Determine calling function in javascript [duplicate] 【发布时间】:2010-11-22 22:34:08 【问题描述】:

可能重复:How do you find out the caller function in javascript?

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

我想确定之前调用的函数是否是onbeforeunload事件中的__doPostback。

【问题讨论】:

【参考方案1】:

每个函数都定义了一个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);
    

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

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

function() 
    if (arguments.callee.caller == null) 
        return ("The function was called from the top!");
     else
        return ("This function's caller was " + arguments.callee.caller);
    

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

【讨论】:

请注意,caller 是一个非标准属性。您的里程可能因浏览器而异。 确实是非标准属性,但 IE 中有类似的东西吗?它应该只适用于我的客户端的 IE,不支持 Firefox。 caller 不是 ECMA3 标准的一部分,但它在所有主流浏览器中实现:IE、Firefox、Safari。在 IE 中使用应该是安全的。 我编辑了我的回复以涵盖非标准争用,并添加了有关获取匿名函数调用者的更多信息。 仅供参考,刚刚测试了caller。正如詹姆斯所说,得到了很好的支持。在 FF3.5、IE7、Chrome2、Safari4(全部在 Windows 上)上呈现并更正。 Opera9 是奇怪的,并且严重损坏:它具有属性,但它指的是 callee,而不是 caller! (可怕。)这里的测试页面:pastie.org/597543【参考方案2】:

在 cr-48 上的 chromeos 中,arguments.callee.caller 将整个函数体作为字符串提供,用于两个命名的匿名调用者函数。

【讨论】:

比如何获取调用者的名字? @Umair arguments.callee.caller.name

以上是关于在javascript中确定调用函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

javascript同步调用[重复]

JavaScript函数调用

在JavaScript中调用函数时出现JavaScript错误,而不是在HTML中调用时[重复]

JavaScript函数参数按引用存储[重复]

调用 iframe 中定义的 Javascript 函数 [重复]

Javascript函数调用。字符串中的转义引号[重复]