Используйте arguments.callee , чтобы получить ссылку на текущую функцию.
Если вы хотите получить имя функции, это немного сложнее: все функции обрабатываются как замыкания методов (фрагменты кода, которые могут быть переданы в качестве аргумента), поэтому они не имеют ссылки натип включающего класса, и при этом у них нет «текущего имени».
Однако, если (и только if) метод является общедоступным, и вы хотите получить имя метода из объявления класса объекта экземпляра, содержащего метод, вы можете использовать descriptionType :
public function someFunction() : void {
var callee:Function = arguments.callee;
trace (getFunctionName(callee, this)); // ==> someFunction
}
private function someOtherFunction() : void {
var callee:Function = arguments.callee;
trace (getFunctionName(callee, this)); // ==> not found
}
private function getFunctionName (callee:Function, parent:Object):String {
for each ( var m:XML in describeType(parent)..method) {
if ( parent[m.@name] == callee) return m.@name;
}
return "not found";
}
Обратите внимание, что это не будет работать при вызове someFunction()
из конструктора, поскольку объект не полностью создан - describeType(this)
в конструкторе вызовет ошибку компиляции.