flash中的trace,扩展trace的能力!

      大家都知道,flash中trace的作用非常大,凡是flash程序员,无不没有不用trace的,trace是用来测试输出的,在测试阶段通常使用trace来查看数据的。当然发布以后trace就不能用了。是需要其他工具来查看输出的,这里简单介绍一下De MonsterDebugger,我在做项目的时候经常用到的工具。

      trace可以输出:数值、字符串、数组、布尔值==。而且对这些类型的输出可以确切的看到其实际内容。

      但是大家可能会对类进行trace的时候犯难。因为trace(new A),(A extends Object)输出的结果却是[object A],并不能显示类A的详细内容。这该怎么办呢,这就是我要讲的内容。

 

      其实仔细研究下就会发现[Object A]其实是A的toString()方法的结果,由于flash中的所有类都继承自Object,而对类的实例执行trace的时候执行的是类的toString()方法。toString()是Object的方法。所以任何类都有toString()方法,因此对类的实例进行输出的时候就不会报错。而会出现像[Object A]这样的结果。讲到重点了。我们今天要做的扩展trace的能力,实际上就是重写类的toString()方法。很简单吧。只要你在你的自定义类中重写这个方法,那么在进行trace的时候,就可以随性所欲的想输出什么就能输出什么了。

     举个例子:

代码
 1 package{
 2     
 3     public class A{
 4         private var attr1:String;
 5         private var attr2:String;
 6         private var attr3:String;
 7         
 8         public function A(str1:String,str2:String,str3:String):void{
 9             attr1=str1;
10             attr2=str2;
11             attr3=str3;
12         }
13         
14         public function toString():String{
15             return "[attr1:"+attr1+"]\n[attr2:"+attr2+"]\n[attr3:"+attr3+"]";
16         }
17     }
18 }

 

      上面定义了一个类A重载了toStirng()方法,大家可能会疑问为什么没用override呢,调用flash帮助文档上的一句话:“注意:Object 类的方法是在 Object 的原型上动态创建的。 要在 Object 的子类中重新定义该方法,请不要使用 override 关键字。 例如,Object 的一个子类实现 function toString():String 而不使用基类覆盖。
      新建fla文件在动作面板里写上var a:A=new A("ab","cd","ef");trace(a);
测试下,就会在输出面板里输出
[attr1:ab]
[attr2:cd]
[attr3:ef]

达到了我们的目的,toString()方法的实体可以任意改,只要能达到自己的要求就行。

 

      总结:trace(类的实例),实际上是执行了trace(类的实例.toStirng());所以只要给类添加toString方法就可以用trace来显示类的详细信息了。

posted @ 2010-03-03 10:31  火苗_IT  阅读(1254)  评论(0编辑  收藏  举报