Получить имя свойства в анонимной функции в Javascript

Можно ли получить имя свойства, вызывающего анонимную функцию в javascript?

Пример

var obj = {
 WhoAmI: function() {
 //Obtain the name WhoAmI
 }
}
2 ответа

Функция не имеет (прямой) идеи о том, какое имя свойства или переменной ссылается на нее.

Хотя в зависимости от средств вызова, его можно было обнаружить.

var obj = {
 WhoAmI: function func() {
 for (var p in this)
 if (this[p] === func)
 alert(p);
 }
}
obj.WhoAmI();

DEMO:http://jsfiddle.net/wUdNf/

Это работает, только если функция вызывается с ее this, установленной как объект, ссылающийся на нее.

Вы можете использовать arguments.callee вместо того, чтобы давать функции имя, хотя это не разрешено в строгом режиме.


var obj = {
 WhoAmI: function() {
 for (var prop in this){
 if (this[prop] === arguments.callee){
 console.log(prop); // => 'WhoAmI'
 }
 }
 }
}
obj.WhoAmI();

licensed under cc by-sa 3.0 with attribution.