去年(2007)10月23日,ES4(SCMAScript4)标准出台了。我感到很遗憾,今天才得以了解ES4的新特征。它们是令人激动人心的。或许有人会说,AS3(ActionScript3)尚未学通,怎么AS4又要出了吗?AS4尚未出台。不过,AS语言是基于ECMAScript标准的,且比C#走得更前卫,所以,我想AS4出台是早晚的事。我预感到在08年下半年将可以见到AS4.技术更新太快了。近几日学习了一下ECMAScript4,给大家介绍一下。
一,对象类型动态声明
在AS3中,可以用{}声明对象,如var programmer : Object = {name : "sban", age : 26}。但是这种声明形如动态类,只是定义上方便一些。在ES4中,充许动态定义对象的类型:
type Programmer = {name : String, city : String, age : byte};type成了关键字,programmerType也没有类型声明,其本即是一个类型。可以如下实例化:
var sban = new Programmer("sban", "Beijing", 26)既然是动态类型声明,还可以再动态些,预先的类型声明定义也可以不要了,直接定义变量:
var sban = new {name : String, city : String, age : byte}("sban", "Beijing", 26)感觉是不是很爽!此外,在函数参数中,也可以连带类型声明:
function move(point : {x : Number, y : Number}) 
...{
...
}
function otherFunc() 
...{
...
move(...{12, 34.33} : {x : Number, y : Number});
}此外参数若只传递{12, 34.33}也可,但定少了强类型支持,与AS3中用法无二。
这便是Record Type特征,它有什么优点:
) 二,数组类型显式声明
值得一提的是,对于数组类型的声明。AS3中尚不支持数组类型,只能用metadata tag(ArrayElementType)声明。而在ES4中,已经成为理所当然。定义一个double类型的数组如下: 简单吧,没办法。如果说As3奠定了其在面向对象编程界的地位,那么,我们期待的AS4将会更加激动人心。拭目以待吧。
type arrType = [double]
type arrType = [int,uint,decimal,byte]
这个数组的元素依次是int,uint,decimal,byte类型。其单独使用不见威力,在类型复合定义中,却用途非凡了,如下:
三,类型复合声明
数组类型声明还可以有多种内建类型,如:
type Student = [ [string,int,string...] ]这是一个复合数组声明,它可以用于存储学生信息,每一个元素是一个数组,包括学生的姓名,年龄,年级,成绩等信息。这在AS3中是不可能的。
type Programmer = {name : {first : string, last : string}, age : uint, city : string}这是一个对象类型复合声明,若用class定义,则至少需要二个类。前文其轻巧易于Create的特征可见于此。
type Programmer = {name : {first : string, last : string}, compories : [ [string, uint] ]}这个声明则更加复合,添加了复合数组声明。与上一个原理是一样的。
四,关于联合类型,一个参数不再只可以有一个类型
你是不是觉得一个参数只有一个定义是天经地义的。在开发flex5之前,我也是这么认为的,直到我需要一个参数既可能是类型A又可能是类型B时。如今在ES4中已为可能。以下定义在ES4中是合法的:
function funcName (arg : ( string | XML )) {...}参数arg既可能是string亦可是XML类型。
type oneType = (decimal , Number)意味着oneType既可是decimal,亦可是Number类型。
截止目前,本文中既出现了string,也出现了String,以及number与Number,其它类似。在ES4中,Number,Boolean,String是其同名小写的wapper,具有dynamic,nullable,non-final特征。
五,强类型支持无处不在,rest也可以有类型了
我一直坚信强类型支持是未来面向对象语言必有特征。在ES4中,原来类型不定的rest也可以指定类型了。例:
function funcName (name : sring , ...[String])
function funcName (name : sring , ...[Programmer])是Build-ins类型,还是custom类型随意。
六,添加了多种数字类型
在aS3中,数据类型止有int,uint,Number三种。你是不是不能满足需要?ES4添加对double(64位), decimal(128位),byte的支持。其中double相当于AS3中的Number。
另外,如前所述,Boolean等是对boolean等的封装。ES4预定义了AnyBoolean类型,详细如下:
type AnyString = (string,String)
type AnyBoolean = (boolean,Boolean)
type AnyNumber = (byte,int,uint,double,decimal,Number)
type FloatNumber = (double,decimal)一要走开噢。在之二中将给大家介绍ES4旨在提高程序员编程体验的一些同样令人激动无比的新特征。请关注http://sban.com.cn/
sban 于北京朝阳园 2008年2月17日
admin#flashas.net (#为@) 联系QQ:
:40777822
浙ICP备06033001号