ActionScript 2.0-AS2.0中的新特性
AS2中的新特性
AS2实际上不是一种新的语言,它是在AS1基础上的升级,如果你基本上掌握了AS1编程,那么学习它应是很容易的。接下来让我们看一下AS2所提供的新东西。
.严格的数据类型和编译提示。
.以数据类型为基础的代码提示。
.针对OOP的新的关键字和特性。
class、Interface、extends、implements、public、private、static、dynamic、intrinsic、import、class path、get、set
下面就让我看一下以上这些每一项都有什么新特点。
严格的数据类型
在比较专业编程语言中,表达是依靠数据类型的。它给我们的具大的好处是:它可以帮助编译器发现潜在的问题,获取类型不配的错误信息。它可以使你的代码清晰易读。
在AS1中声明一个变量如count的过程如下:
在AS2中声明的过程应是这样。
var count:Number;
注意,它的语法结构是:<变量>:<数据类型>,这对许多java,c#,c++的程序员来说可能认为有些怪,这实际上是ECMA-262协会制定的规定,macromedia公司是按照这个规定做的而已。
AS2的变量,函数以及返回值都支持严格的数据类型,如下例函数接收字符串参数返回一个布尔值。
当一个函数在没有接收到参数和返回任何值时,使有Void做为数据类型。
这种参数被写空的形式看起来有些怪,但这种用法却被大量的应用在组件的编写上,它只意味着当前没有指定的参数。然而如果你试着将参数传给这个函数,编译器在编译时是不会出现任何的错误提示同时也会将参数进行传递的。
尽管AS2支持严格的数据类型,却并没有被真正的执行这种语法,可是当编译器发现有数据类型不配的情况时就会出现错误提示信息,使用严格的数据来进行编程是一个好的开始习惯。它的好处我们在上面已经说过。如果你使用严格的数据类型来编程,那么你在发布时应指定使用AS2,并且指定发布为FLASH PLAYER 7。
使用严格的数据类型,新的编译器为你提供的了许多新的编译提示阻止你的影片出现类型不配的错误,但在编译过程中可能要花去较长的时间调试。
代码提示
在FALSHMX中的代码提示是依据变量名称的扩展如myPushButton_pb,mycomboBox_cb中的_pb,_cb来出现代码提示的,在2004中你会发现大多数的变量扩展不在生效,新版本的AS2以不同的约定型式来出现代码提示。
当一个变量类型被指定(如果这个变量类型对这个类是有效的)方法和属性的代码提示会在点的后面出现,否则是不会出现任何代码提示的。通过指定的数据类型来显示comboBox的代码提示如:
combo.

你可以通过打开如下文件查看默认的扩展代码提示如:
小提示:在2004中加入FLASHMX的代码提示
如果你使用2004来编辑你的FLASHMX文档,你可以将部分的FLASHMX代码提示加入到2004的代码提示中。
复制
<typeinfo pattern="*_ch" object="FCheckBox"/>
<typeinfo pattern="*_pb" object="FPushButton"/>
<typeinfo pattern="*_rb" object="FRadioButton"/>
<typeinfo pattern="*_lb" object="FListBox"/>
<typeinfo pattern="*_sb" object="FScrollBar"/>
<typeinfo pattern="*_cb" object="FComboBox"/>
<typeinfo pattern="*_sp" object="FScrollPane"/>
<typeinfo pattern="globalStyleFormat" object="FStyleFormat"/>
</codehints>
现在你就可以在2004中使用FLASHMX的组件代码提示了。
ActionScript 2.0-针对OOP的关键字和特性
下面我们将真正研究一下AS2的特性,在早期往往是在讨论AS1复杂的面向对象编程比实际工作更多一些,现在你将很快的看到,你不用花很多时间去争论怎么样做到最好的继承,将代码放置在哪和如何组织好你的代码库。
让我们先回顾一下OOP基础,OOP的最基本单元是对象,它包含两部分:代码和数据。由于对象是一种以自己自足的形式出现,因此它的数据和代码(方法)不需要公开。就象一个黑盒子,对象负责以自身的方法去管理自身的数据,对象与对象之间通过传递信息通讯。这些信息以公用或公开的方式传递和接收。而内部的数据和方法并没有直接参与其中,这就是OOP的基本原理。
在OOP的设计中,比做是一张大图,要想到重点和要实现的目标,以及各个部分之间的联系。将这张大图分成小的单元,并且保证各自的自身独立性,那么整个项目就很容易完成。而这些小的单元在OOP中就被称为类。所有这些AS2都提供了很好的支持。
下面这些关键字与OOP有关:
class interface extends implements
public private static dynamic
import get set intrinsic
我们不在重复mcromedia的帮助文档中对每一关键字的描述,我们可以用实例来说明。注意关键字intrinsic是mcromedia内部使用的关键字。这里面没package也就包的关键字,但是它与类路径的工作方式是很重要的,就象是其它语言中的包一样,如JAVA。
下面我们来看一下例子,在AS1中的类,将其改写为AS2的类。
_global.Parent = function(name) {
this.init.apply(this, arguments);
};
// 类的属性
Parent.lastNames = new Array();
Parent.prototype.init = function(name) {
this.lName = name;
Parent.lastNames.push(name);
this.id = Parent.lastNames.length-1;
trace("Added ’"+ Parent.lastNames[this.id] +"’ at: "+ this.id);
};
Parent.prototype.getLastName = function() {
return (this.lName);
};
Parent.prototype.setLastName = function(s) {
this.lName = s;
Parent.lastNames[this.id] = s;
};
Parent.prototype.getNames = function() {
return (Parent.lastNames);
};
Parent.prototype.addProperty("lastName", Parent.prototype.getLastName, Parent.prototype.setLastName);
Parent.prototype.addProperty("names", Parent.prototype.getNames, null);
上面的代码改写为AS2就向下面这样:
新的关键字被应用在如下的例子中:class, private, public, static, get, set
private var lName:String = "";
private var id:Number;
private static var lastNames:Array = new Array();
// 构造函数
public function Parent(name:String) {
init.apply(this, arguments);
}
private function init(name:String):Void {
lName = name;
lastNames.push(name);
id = lastNames.length-1;
trace("Added ’"+ lastNames[id] +"’ at: " + id);
}
public function get lastName():String {
return lName;
}
public function set lastName(s:String):Void {
lName = s;
lastNames[id] = s;
}
public function get names():Array {
return lastNames;
}
}
通过上面的AS1和AS2执行同一个类。我们可以看出二者非常的相似,主要的不同以AS2为例:
1。以外部文件的形式存在如.as,同时注意类的名称要与外部文件名称相同。
2。AS2区分大小写,在AS2中object 和 Object是不同的。
3。类的方法定义在类的内部。
4。类的内部不在允许有内部类出现。
5。关键字如public,private,static等写在类方法或属性的前面。
6。数据类型写在方法或属性名称的后面如:name:string;
7.创建get|set方法更容易使用如下方法:[modifier] function get|set functionName(argument[:type,...])[:type] {}