从as2迁移到as3

终于正式开始从as2迁移到as3了,这段时间里,我会把自己学习过程中的一些小经验贡献给大家。另外,因为是从as2迁移到as3,所以本文便从基础开始,针对2者的差异做代码分析比较。

1、常量差异
请看as2代码:

var str:String;
var num:Number;
var boo:Boolean;
var obj:Object;
var notyped;
trace(str+newline+num+newline+boo+newline+obj+newline+notyped);
//return
undefined
undefined
undefined
undefined
undefined

再来看as3代码:
var str:String;
var num:Number;
var boo:Boolean;
var obj:Object;
var notyped;
trace(str+"\n"+num+"\n"+boo+"\n"+obj+"\n"+notyped);
//return
null
NaN
false
null
undefined

从2者可以清楚的看到:在as2中String、Number、Boolean、Object的默认值都是undefined,而在as3中则分别为null、NaN、false、null。只有未作申明的变量的默认值才是undefined。as2中还有一个常量newline在as3中已经取消,由"\n"替换。

2、操作符差异
这里先只讨论instanceof。虽然as3中还保留了这个操作符,但as3中推荐用is代替它。而且is的用法更为灵活。
比如:

var mystr:String="test";
var mytest:Test = new Test();//Test is extends SuperTest
trace(mytest instanceof SuperTest); //AS2 return false //AS3 return true
trace(mystr instanceof String);//AS2 return false
trace(mystr instanceof String);//AS3 return true
trace(mystr is String);//AS3 return true

从此例可以看出instanceof在as3中的比as2中有了变化。在as2中instanceof不会将原始类型转换为包装对象,因此在上面例子中的String验证中返回false,并且它对超类(如SuperTest)不起作用。而在as3中它是基于对象的原型链的,所以在第一个trace中会返回true。但是as3中instanceof并不支持接口,而is支持。比如:
var mytest:Test = new Test();//Test implements InterfaceTest
trace(mytest is InterfaceTest); //AS3 return true 
trace(mytest instanceof InterfaceTest); //AS3 return false

posted @ 2008-10-23 10:17  Landy_di  阅读(263)  评论(0)    收藏  举报