在严格模式JavaScript中检索“self”函数

时间:2011-01-09 18:11:50

标签: javascript function arguments strict-mode

我经常需要在函数f中检索指向f的方法的名称。例如。假设我们有getMethodName(obj, methodFunction)函数使用foreach上的obj来查找属于methodFunction的链接的属性:

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

如何在严格模式中弃用arguments.callee

2 个答案:

答案 0 :(得分:4)

你不能这样做。你不应该首先这样做,这是神奇的,你的功能不应该依赖于它的调用者等。改变你的设计,以使它再次工作。

arguments.callee.caller不仅因为风格不好而被删除,还因为它们打败了优化。即内联,如果依赖于调用者,也不能依赖函数,则无法内联某些内容,因为代码可能只是放在没有函数的地方。

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

答案 1 :(得分:1)

值得指出的是,因为我无法判断你是否认为它,如果你只是在对象文字中为函数提供一个名称,你就可以这样说:

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

但要注意:我认为IE在发布版本中有一个错误,它将在封闭范围内定义一个名为METHODNAME的函数(而不是仅使该函数可访问)。但是,根据规范,只要您使用在函数本身中找不到的名称,或者在函数可以调用eval的情况下传递给eval的代码,这就完全可以了。 / p>