1.3.1 对象和点符号
因为ActionScript是一种面向对象的编程语言,所以对于ActionScript来说,最重要的概念就是对象了。对象是Flash动画中ActionScript 可以操纵的最基本的单元。每一个Symbol物件都可以被声明成对象。在成为对象之后,就会拥有一些属性、一些方法,ActionScript就是通过改变这些对象的属性,调用对象的方法来完成对动画的操纵的。
同一种类型的对象都从它的对象原型(称为它的父对象)那里继承了一些相同的属性和方法。例如,Graphic Symbol在被声明成对象之后,都会拥有_xscale和_yscale(X轴和Y轴的缩放比例)这两个属性。这是它们从同一个父对象处继承来的。
既然不同的对象会有相同名字的属性或方法,那么ActionScript如何知道要去控制哪一个对象的属性和方法呢?这就需要用到点符号“.”。
在点符号之前(左侧)是对象或上一层的对象,在点符号后面(右侧)则是该对象的属性、方法或下一层的对象。举个例子看一下也许会更清楚:
Object是一个对象,它有一个属性property和一个方法Method()。如果要读取或是给它的属性赋值,应该这样做:
a=Object.property; //读取属性property中的值并赋给变量a
Object.property=b; //将变量b中的值赋给属性property
如果要调用Object对象的一个方法,应该这样做:
Obejct.Method(); //调用Object对象的Method()方法
或者
a=Object.Method(); //将Object对象的Method()方法的返回值赋给变量a
1.3.2 多层式对象结构
在上面的这些例子中,点符号仅仅是作为分隔对象和属性方法使用的。其实,在实际应用中,点符号还有更大的用途。
在Flash动画中,每一个对象就像文件系统中的一个文件,都有自己的一个路径。整个Flash的舞台(Stage)就相当于文件系统的根目录,舞台上的对象就像是根目录上的文件。在文件系统中,会有目录(Directory)的概念,有一部分某些性质相同的文件被放在同一个目录下面,目录中也可以有子目录。相应的,在Flash中,Movie Clip被声明成对象后,就充当起了目录的角色。所以在MovieClip中的物件被声明成了对象后,就相当于目录中的文件一样,被称为是对象中的对象。当然在Movie Clip中也可以再包含Movie Clip,所以,“目录中的目录”的情况在Flash的多层式对象结构中也会出现。看一个例子也许会更清楚一些:
在图1-5中,舞台是第一层,是根,在舞台上有MC1和MC2两个MC对象,以及一个Graphics Symbol对象GS1,MC1和MC2就形成了第二层;在MC1中又有GS2和GS3两个Graphics Symbol对象,MC2中还有一个MC3对象,它形成了第三层;MC3中有一个GS4,它是第四层。
如何在ActionScript中来表示这些对象的绝对路径?这就需要用到点符号。点符号的作用和文件系统中的目录分隔符“/”(UNIX)或“\”(Windows)类似。
![]() |
根 第二层 第三层 第四层
图1-5
根对象不用声明,在Flash ActionScript中可以直接使用_root关键字来表示。关于_root关键字将在下面的章节中详细说明。
MC1,MC2和GS1对象的绝对路径分别是:
_root.MC1
_root.MC2
_root.GS1
GS2,GS3和MC3对象的绝对路径分别是:
_root.MC1.GS2
_root.MC1.GS2
_root.MC2.MC3
GS4对象的绝对路径是:
_root.MC2.MC3.GS4
结合上一小节说过的概念来更进一步地讲,如果GS4有一个属性property,一个方法Method(),我们可以这样访问:
a=_root.MC2.MC3.GS4.property; //读取GS4对象的属性property中的值并赋给变量a
_root.MC2.MC3.GS4.property=b; //将变量b中的值赋给GS4对象的属性property
_root.MC2.MC3.GS4.Method(); //调用GS4对象的Method()方法
使用点符号使得访问对象的层次十分清晰,这也是所有面向对象语言的特点。
在理解了ActionScript的多层对象和文件系统的目录结构的相似性后,就要了解一下在ActionScript编程中和对象层次关系非常密切的三个关键词_root,_parent和this了。
1._root关键词,用来表示根对象——舞台
不管程序放在哪一个层级的对象中,都可以使用_root关键词来引用根对象。还是和文件系统对应,_root这个关键词就相当于/(UNIX)或\(Windows)在文件系统中的作用。在上面的一些关于对象的绝对路径的例子中,都是以_root关键词开始的。记住,Flash ActionScript中所有对象都在_root根对象(舞台Stage)中。
2._parent关键词,用来表示上一层的对象
_parent关键词的作用就和文件系统中的“..”(回上一层)相似。在Flash中,ActionScript代码被存放的对象路径就是执行这段代码时,默认的当前对象路径。例如,将ActionScript代码放在GS2中,这样在这段代码执行的时候,它的默认路径就是_root.MC1.GS2。如果要在MC2对象的ActionScript中引用GS3对象,可以这样写:
_parent.GS3
当然也可以使用_root关键词:
_root.MC1.GS3
_parent指的是上一层的对象,所以如果要引用上一层对象的属性或方法,也可以使用_parent关键词。例如,在GS2中引用MC1的property属性和Method()方法如下:
a=_parent.property;
_parent.Method();
3.this关键词
this关键词是用得最多的关键词,它表示当前的对象,作用类似于文件系统中的“.”(当前目录)。例如,在GS2对象中引用自己的属性property,虽然可行,但是不必要这样使用:
a=_root.MC1.GS2.property;
或
a=_parent.GS2.property;
因为当前对象就是GS2,所以可以使用this关键词:
a=this.property;
这样做非常简练和方便。同样的道理,在调用当前对象的方法时,也可以一样使用this关键词。例如,在GS对象中调用GS2的Method()方法:
this.Method();
