刚搞完央视一个音频媒资系统的开发,领导也不让闲着,说研究下flex,我说好啊,于是先看as3。
同JavaScript一样,ActionScript3(简称as3)同样遵循ECMAScript标准,所以一开始我以为跟JavaScript大同小异,只看下语法
差异就行了。但是没想到,我的想法估计只能适用于as1.0了。Adobe公司把as3把封装得如此接近于面向对象的语言,以至于连prototype
都退居次席。ActionScript 根本上是基于原型的语言,原型链是以前版本的ActionScript中的唯一继承机制,在ActionScript 3.0 中却只
充当一个辅助角色。主要的继承机制固定属性继承由 traits 对象内部处理。这大大符合了大多数OO开发者的习惯。(寻思JavaScript什么
时候能被封装的如此牛呢),废话少数,先看概述
一.概述
as3对于对象的描述与传统的OO语言如C++,Java稍有不同。先看官方文档的说明:
Programmers familiar with object-oriented programming (OOP) in Java or C++ may think of objects as modules
that contain two kinds of members: data stored in member variables or properties, and behavior accessible through
methods. The ECMAScript edition 4 draft, the standard upon which ActionScript 3.0 is based, defines objects in a
similar but slightly different way. In the ECMAScript draft, objects are simply collections of properties. These
properties are containers that can hold not only data, but also functions or other objects. If a function is attached to
an object in this way, it is called a method.
译:熟悉 Java 或 C++ 中面向对象的编程 (OOP) 的程序员可能会将对象视为包含以下两类成员的模块:存储在成员变量或属性中的数据,
以及可通过方法访问的行为。但是ECMAScript 第 4 版草案(ActionScript 3.0 所基于的标准)以相似但稍有不同的方式定义对象。在
ECMAScript草案中,对象只是属性的集合。(笔者注:这其实是由script语言是基于原型的特性决定的,典型的例子是一段javascript代码
,例1)这些属性是容器,不仅包含数据,还可以包含函数和其他对象。如果一个函数以这种方式(笔者注:也就是包含到属性中)被附加到
某个对象上,它就叫方法。
例1:脚本语言中的对象,以javascript代码为例:
var myObj = {
color:"red",
name:"Ferrairi",
selectCar:function(){alert("I wanna a " + this.color + this.name);} ,
owner:{name:"ckp",age:25}
}
如上的JSON形式:myObj对象有四个属性color,name,selectCar,owner。其中selectCar属性包含一个函数,所以该函数叫做myObj的一个方法
;ower属性更好玩,甚至包含了一个对象!
有人说了,对象定义都不同,差别岂不是很大,学起来会不会又像javascript那样很不爽?不用着急,官方文档也说了,只有在我们讨
论ActionScript的对象模型或其它高级主题时,了解这些区别才有意义。在其他大多数情况下,你就把as3当传统的OO一样来用吧!甚至在官
方文档《ActionScript 3.0 语言和组件参考》中,就是使用“属性”一词表示变量,使用“方法”一词表示作为类的一部分的函数。