Fra*_*rth 14 flash adobe actionscript actionscript-3
我想从该函数内部获取函数的名称.例如:
function blah() {
//I want to get the string "blah" here, from the function's name
}
Run Code Online (Sandbox Code Playgroud)
或者至少是Function对象?
wel*_*rat 26
使用arguments.callee获取对当前函数的引用.
我想获取函数名称,它有点棘手:所有函数都被视为方法闭包(可以作为参数传递的代码段),因此它们不拥有对封闭类类型的引用,也不他们有一个"现在的名字".
但是,如果(且仅当)方法是公共的,并且您想要从包含该方法的实例对象的类声明中获取方法名称,则可以使用describeType:
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";
}
Run Code Online (Sandbox Code Playgroud)
请注意,当您someFunction()
从构造函数调用时,这将不起作用,因为该对象未完全实例化 - describeType(this)
在构造函数中会导致编译错误.
我只是使用堆栈跟踪来完成它,这是Flash Player调试器在抛出未处理错误时显示的内容.这是我的实现:
function blah()
{
var e:Error = new Error();
var s:String = e.getStackTrace();
var functionName:String = s.slice(s.indexOf('/')+1, s.indexOf('('));
trace(functionName); //blah
}
Run Code Online (Sandbox Code Playgroud)
如果你想让它成为一个单独的函数,你可能需要让字符串的解析更有趣.但是函数名称肯定在堆栈跟踪中.
编辑:重要警告
在AS3参考郎说,的getStackTrace方法仅适用于Flash Player/AIR的调试器版本,并且将返回null
,否则.所以这绝对不是一个可部署的解决方案.抱歉.
归档时间: |
|
查看次数: |
6888 次 |
最近记录: |