【转】从 AS2 到 AS3 之一——常量&操作符&参数
- 作者:flashlizi
- 来自:经典论坛
随着Flash CS3正式版的发布,估计很多朋友都开始从AS2迁移到AS3了。不过AS3比AS2改变的实在太多,在as2中很多方法属性在as3中并不相同,甚至消失,而且目前帮助文档是E文的,现下的as3基础文章也并不多,因此特开此贴,集合一些基础性的要点,尽量以例子来说明,让大家更快更好的往AS3迁移。文中如有错误,敬请指正。有兴趣的朋友也可以一起来添加
1、常量
先看AS2代码:
1var str:String;
2var num:Number;
3var boo:Boolean;
4var obj:Object;
5var notyped;
6trace(str+newline+num+newline+boo+newline+obj+newline+notyped);
7//return
8undefined
9undefined
10undefined
11undefined
12undefined
再看AS3代码:
1var str:String;
2var num:Number;
3var boo:Boolean;
4var obj:Object;
5var notyped;
6trace(str+"\n"+num+"\n"+boo+"\n"+obj+"\n"+notyped);
7//return
8null
9NaN
10false
11null
12undefined
从上面2个例子可以清楚的看到:在as2中 String、Number、Boolean、Object 的默认值都是undefined,而在as3中则分别为 null、NaN、false、null 。只有未作声明的变量的默认值才是 undefined 。因此,在 as2 中一个 undefined
打天下的时代已经过时了,在as3中更加明确。同时as2中还有一个常量 newline
在as3中已经取消,由 \n
替换。另外特别说明就是 trace
方法的功能也加强了,参数个数不限,因此上面可以改成 trace(str,num,boo,obj,notyped)
了。
2、操作符
这里只讨论instanceof。虽然as3中还保留了这个操作符,但as3中推荐用is代替它。而且is的用法更为灵活。
代码:
1var mystr:String="test";
2var mytest:Test = new Test();//Test is extends SuperTest
3trace(mytest instanceof SuperTest); //AS2 return false //AS3 return true
4trace(mystr instanceof String);//AS2 return false
5trace(mystr instanceof String);//AS3 return true
6trace(mystr is String);//AS3 return true
从此例可以看出 instanceof
在as3中的比as2中有了变化。在as2中 instanceof
不会将原始类型转换为包装对象,因此在上面例子中的 String 验证中返回 false ,并且它对超类(如SuperTest)不起作用。而在as3中它只检查原型链,所以在第一个 trace
中会返回 true。但是as3中 instanceof 并不支持接口,而 is 支持。
代码:
1var mytest:Test = new Test();//Test implements InterfaceTest
2trace(mytest is InterfaceTest); //AS3 return true
3trace(mytest instanceof InterfaceTest); //AS3 return false
至于 add、eq、gt、ge、<> 、and、not、or、ne、lt、le
等AS1的语法在as3中统统取消了。
3、参数
在AS3中增加了一个 ...(rest)
这样的参数。它的作用是指明函数可以接收任意多个以逗号分隔的参数。AS3代码:
1function testfun1(param0, param1, ...arg)
2{
3 trace(arg is Array,arg,arg.length);
4}
5testfun1("param0","param1","param2","param3");
6//return: true param2,param3 2
在这里 ...arg
表示一个名为arg的数组。
当运行testfun1后, arg=["param2","param3"]
。还记得function有个 arguments 类么,当使用了 ...(rest)
后,argumnets 就无法获取了。但是如上例所示 arg.length
同样可以使用。但是并没有类似 arguments.callee
的这种方法,所以要使用 ...arg
的时候确保不会使用 arguments.callee
的方法。
- 文章ID:334
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/as2toas2-1/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。