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的时候,就可以随性所欲的想输出什么就能输出什么了。

     举个例子:

ExpandedBlockStart.gif 代码
 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来显示类的详细信息了。

转载于:https://www.cnblogs.com/huomiao/archive/2010/03/03/1676985.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值