2 ActionStript3.0 特性介绍
ActionScript 是针对 Adobe Flash Player 运行时环境的编程语言,它在 Flash 内容和应用程序中实现了交互性、数据处理以及其它许多功能,ActionScript 是由 Flash Player 中的 ActionScript 虚拟机 (AVM) 来执行的。ActionScript代码通常被编译器编译成“字节码格式” ,有点类似 java 的处理和运行机制。变过 C#,Java和javascript程序的朋友,肯定能在 ActionScript 中找到这些语言的影子。
2.1 内置命名空间和自定义命名空间
四个内置修饰符:
1public :对所有代码可见
2
3private: 只对类内部可见
4
5internal :只对定义所在的同一包内可见
6
7protected :对同一包以及不同包的子类可见
8
自定义命名空间:使用关键字namespace定义命名空间,声明属性和方法时,应用命名空间。
AS 代码:
1Namespace testSpace="org.blogjava.jm/ testSpace ";
2
3testSpace myfunction2():void{}
4
5 调用使用 use 关键字打开命名空间
6
7use mySpace2;
8
9myfunction2();
2.2 Local 变量特点
与java不同的是,在as3中,变量没有块级作用域(即两人大括号中间),如果在一个块内声明了一个变量,比如一个for循环内声明了一个变量,它在该代码所在整个函数内都是可访问的。
1function myFunction():void{
2
3 for(var i:int=0;i<5:i++){
4
5 var last:int = i;
6
7 }
8
9 trace(last);
10
11}
12
last 在 for 中定义但可以在 for 块外面访问到,个人觉得这样设计欠妥,尽管很方便。
2.3 Dynamic 类
Object 类本身就是动态类,当然也可以用 dynamic 关键字来声明一个类,所谓动态就是在运行时可以对类追加属性和方法。
1dynamic class Protean{}
2
3 var myProtean:Protean = new Protean();
4
5myProtean.name = "jack.wang";
6
7myProtean.password = 3;
8
9trace(myProtean. name , myProtean. password );
10
2.4 定义函数的两种方式:函数语句和函数表达式
1 //函数语句声明
2
3Function fun1():void{}
4
5 //函数表达式声明
6
7var fun2:Function = function():void{}
8
9函数表达式声明的函数是不能够被垃圾回收的,必须显示的调用 delete 命令。
10
11var t:Test = new Test(); //t是动态类Test的一个实例
12
13t.funt = function(){};//把一个函数声明为t的一个属性
14
15delete t.funt; //删除刚才新增的函数,我们刚才声明的函数也被回收了
16
2.5 在as3中也有arguments对象,功能基本上和javascript中的一样。
arguments 对象是一个数组,其中包括传递给函数的所有参数,arguments.length 属性报告传递给函数的参数数量,(避免将 "arguments" 字符串作为参数名,因为它将遮蔽 arguments 对象)
1 function traceArgArray(x:int):void
2
3{
4
5 for (var i:uint = 0; i < arguments.length; i++)
6
7 {
8
9 trace(arguments[i]);
10
11 }
12
13}
14
15traceArgArray(1, 2, 3);
16
17// 输出:
18
19// 1
20
21// 2
22
23// 3
24
当然也可以用类似 java 的形式
function traceArgArray(x: int, args)
2.6 在as3中允许定义同名的静态属性和实例属性
1class StaticTest
2
3{
4
5 static var message:String = "static variable";
6
7 var message:String = "instance variable";
8
9}
10
11// 在脚本中
12
13var myST:StaticTest = new StaticTest();
14
15trace(StaticTest.message); // 输出:静态变量
16
17trace(myST.message); // 输出:实例变量
18
2.7 在as中有一个叫做set和get存取器的东西,类似JavaBean,但又有所不同。
class GetSe
t{
private var privateProperty:String;
public function get publicAccess():String
{
return privateProperty;
}
public function set publicAccess(setValue:String):void
{
privateProperty = setValue;
}
}