Как вернуть имя свойства, которому назначена безымянная функция - PullRequest
0 голосов
/ 02 августа 2009

Я получил следующий код:

function test () {

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

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

Есть ли способ узнать имя свойства, которому назначена безымянная функция? Все, что я пробовал в сочетании с методами "вызывающего" и "вызываемого", не принесло никакого успеха.

Edit: Причина, по которой я хотел бы получить имя свойства, состоит в том, чтобы использовать его для отладки сообщений, когда мне не нужно вручную передавать имя свойства в регистратор. Производительность не будет проблемой, так как это только для процесса разработки.

На самом деле предложение назвать функцию - хорошая идея ... Я думаю. Есть ли у этого какие-либо очевидные / хорошо известные побочные эффекты, помимо необходимости дважды вводить имя функции? : -Р

Кроме того, это привело меня к идее добавить комментарий в начале функции, которая выглядит примерно так:

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

и который также может быть проанализирован - но комментарии JavaScript, похоже, обрезаны в FireFox (в отличие от IE), и я скорее предпочитаю FF для разработки. Будет ли способ также отображать / использовать комментарии JS в FF при использовании свойства "caller" / "callee"?

1 Ответ

2 голосов
/ 02 августа 2009

Вы можете просмотреть все, что доступно в экземпляре объекта, например,

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...