我经常需要在函数f
中检索指向f
的方法的名称。例如。假设我们有一个getMethodName(obj, methodFunction)
函数,它在obj
上使用foreach
来查找链接到methodFunction
的属性
obj = {
foo : function() {
var myName = getMethodName(obj, arguments.callee); // "foo"
}
}
如何在严格模式中执行此操作,其中arguments.callee
已被弃用?
发布于 2011-01-10 02:46:24
你不能这么做。首先你不应该这样做,这是魔术,你的函数不应该依赖于它的调用者等等。为了让它再次工作,改变你的设计。
arguments.callee
和.caller
不仅因为糟糕的风格而被删除,还因为它们破坏了优化。也就是说内联,如果你依赖于调用者,你就不能内联某些东西,也不能依赖于函数,因为代码可能只是放在没有函数的地方。
阅读:http://whereswalden.com/2010/09/08/new-es5-strict-mode-support-now-with-poison-pills/
发布于 2011-01-10 07:41:20
值得一提的是,由于我不知道您是否考虑过它,如果您只是在对象文字中为函数提供一个名称,您可以这样引用它:
obj = {
foo : function METHODNAME() {
var myName = getMethodName(obj, METHODNAME); // "foo"
}
}
但请注意:我认为IE在发布版本中有一个错误,这将在封闭的作用域中定义一个名为METHODNAME
的函数(而不是只允许该函数访问它)。但是,按照规范,这是完全正确的,只要您使用在函数本身或传递给eval
的代码中找不到的名称(如果函数可以调用eval
),就可以很好地工作。
https://stackoverflow.com/questions/4640841
复制相似问题