3

我经常需要在函数f中检索指向f. 例如。假设我们有一个getMethodName(obj, methodFunction)函数foreach用于obj查找链接到的属性methodFunction

obj = { 
    foo : function() {
        var myName = getMethodName(obj, arguments.callee); // "foo"
    }
}

如何在不推荐使用的严格模式下执行此操作arguments.callee

4

2 回答 2

4

你不能这样做。而且你一开始就不应该这样做,这很神奇,你的函数不应该依赖于它的调用者等。改变你的设计以使其再次工作。

arguments.callee并且.caller不仅因为风格不好而被删除,而且还因为它们击败了优化。即内联,如果您依赖于调用者或函数,则不能内联某些东西,因为代码可能只是放在某个地方而没有围绕它的函数。

阅读:http ://whereswalden.com/2010/09/08/new-es5-strict-mode-support-now-with-poison-pills/

于 2011-01-09T18:46:24.200 回答
1

值得指出的是,因为我不知道你是否考虑过它,如果你只是在对象文字中为函数提供一个名称,你可以这样引用它:

obj = { 
    foo : function METHODNAME() {
        var myName = getMethodName(obj, METHODNAME); // "foo"
    }
}

但要注意:我认为 IE 在发布版本中有一个错误,这将定义一个METHODNAME在封闭范围内命名的函数(而不是使其仅可供该函数访问)。但是,按照规范,这完全符合 kosher 规定,只要您使用在函数本身的任何地方都找不到的名称,或者在传递给eval函数可以调用的代码中找不到的名称,它就可以正常工作eval

于 2011-01-09T23:41:19.910 回答