Flashmx2004系列教程〈三〉ActionScript 2.0-针对OOP的关

yibin 2015-02-08 网站运营 508

下面我们将真正研究一下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] {}

扫码添加微信

13013082126 扫描微信 建站咨询 优化咨询