从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 |
| 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 |

浙公网安备 33010602011771号