下面我们将真正研究一下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
class Parent { 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] {}
发表回复