从flash as2.0迁移到as3.0


 终于正式开始从as2迁移到as3了,这段时间里,我会把自己学习过程中的一些小经验贡献给大家。另外,因为是从as2迁移到as3,所以本文便从基础开始,针对2者的差异做代码分析比较。
[1b]1、常量差异
[/1b]请看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"替换。
[1b]2、操作符差异
[/1b]这里先只讨论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
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/1838.html

你可能感兴趣的:(html,Flash)