跟踪运行该功能的内容

时间:2009-10-09 03:34:20

标签: flash actionscript-3

私有函数dataLevel():void {

        //Level 2
        a1=new Array(b1,b2);
        a2=new Array(b3,b4);


        //Level 1
        allA=new Array(a1,a2);


        //trace if the following level exist

        //if the following level exist, create the Branch
        if (allA is Array==true) {
            createBranch(this);

            if (allA[0] is Array==true) {
                createBranch(allA[0]);
            }

            if (allA[1] is Array==true) {
                createBranch(allA[1]);
            }
        }
    }


    private function createBranch(event:Object):void {

        trace(event.target);

}

2 个答案:

答案 0 :(得分:1)

将变量命名为 event 不会使其成为Event对象(并为其指定目标属性)。使用trace(event);跟踪传递的参数。更好的是,将变量名称更改为arg1(argument1)或更有意义的内容。

private function createBranch(arg1:Object):void 
{
    trace(arg1);
}

event通常用于事件处理程序中Event类型的变量或其子类。

答案 1 :(得分:0)

听起来你基本上试图获得堆栈跟踪的内容。您可以在运行时从Error异常类中获取堆栈跟踪的字符串表示形式,但仅限于Flash Player中的调试模式。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Error.html#getStackTrace%28%29

private function createBranch(arg1:Object):void 
{
    var stacktrace:String = new Error().getStackTrace();
    //parse 'stacktrace' and do what you want here.
}

现在这仅适用于播放器的 debug 版本,'getStackTrace()'在标准版本中返回null,因此这对任何生产应用程序都不起作用。

唯一的另一种选择是将一个令牌传递给'createBranch'以指示调用的来源(我假设它也会确定你正在创建什么类型的'分支'?)这将是一个更好的方法为了让你的逻辑更清洁,我想:

private function createBranch(arg1:Object, branchType:String):void 
{
    switch(branchType){
        case "type1":
             //create your branch type1 here
             break;
        case "type2":
             //create your branch type2 here
             break;
        case "type3":
             //create your branch type3 here
             break;
    }
}

类似的东西。