在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 将整个函数体作为字符串提供,用于两个命名的匿名调用者函数。
【讨论】:
比如何获取调用者的名字? @Umairarguments.callee.caller.name
以上是关于在javascript中确定调用函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在JavaScript中调用函数时出现JavaScript错误,而不是在HTML中调用时[重复]