如何返回分配了未命名函数的属性的名称

时间:2009-08-02 10:57:10

标签: javascript reflection closures

我收到了以下代码:

function test () {

    this.testFunction = function () {
        //code to alert or return the string "testFunction"
    }

}
var testVar = new test();
testVar.testFunction();

有没有办法找出属性的名称,未命名的函数被分配给该属性?无论我尝试与“来电者”和“被叫者”一起使用的方法都没有取得任何成功。

编辑: 我想要检索属性名称的原因是使用它来调试消息,我不必手动将属性名称传递给记录器。性能不是问题,因为这只是针对开发过程。

实际上,命名这个功能的建议是个好主意......我想。这是否有任何明显/众所周知的副作用,除了必须输入两次函数名称? :-P

此外,这让我想到在函数的开头添加注释,看起来像

/* $$NAME$$="testFunction" */

并且也可以解析 - 但是在FireFox(与IE不同)中似乎会修剪JavaScript注释,而我更喜欢使用FF进行开发。在使用“调用者”/“被调用者”属性时,是否还有一种方法可以在FF中显示/使用JS注释?

1 个答案:

答案 0 :(得分:2)

您可以循环浏览对象实例中可用的所有内容,例如

function test() {
    this.testFunction = function () {
        for (var i in this) {
            if (this[i] === arguments.callee) {
                alert(i); // alerts 'testFunction'
            }
        }
    }
}
var x = new test();
x.testFunction();

如果你想以递归方式调用函数,你可以简单地命名它

this.testFunction = function inner() {
    inner();
}