语句是在运行时执行或指定动作的语言元素。例如,return 语句会为执行该语句的函数返回一个结果。if 语句对条件进行计算,以确定应采取的下一个动作。switch 语句创建 ActionScript 语句的分支结构。
属性关键字更改定义的含义,可以应用于类、变量、函数和命名空间定义。定义关键字用于定义实体,例如变量、函数、类和接口。主要表达式关键字表示文本值。若要获得保留字的列表,请参见《ActionScript 3.0 编程》。
指令包含语句和定义,在编译时或运行时起作用。下表中将既不是语句也不是定义的指令标记为指令。
用法
| function functionName(parameter0, parameter1, ...rest){
// 语句
}
|
| Player 版本 : | Flash Player 9 |
指定函数将接受任意多个以逗号分隔的参数。参数列表成为了在整个函数体中可用的数组。在参数声明中,数组的名称在 ... 字符后指定。参数可以拥有保留字以外的任意名称。
如果与其它参数共同使用,则 ...(其余的)参数声明必须是最后指定的参数。只有传递给函数的参数数目超过其它参数的数目时,才会填充 ...(其余的)参数数组。
逗号分隔参数列表中的每一个参数都将放置在该数组的一个元素中。如果您传递了 Array 类的实例,则整个数组会放置到 ...(其余的)参数数组的单个元素中。
使用此参数会使 arguments 对象不可用。尽管 ...(其余的)参数提供了与 arguments 数组和 arguments.length 属性相同的功能,但是未提供与由 arguments.callee 提供的功能类似的功能。使用 ...(其余的)参数之前,请确保不需要使用 arguments.callee。
参数
| rest:* —
标识符表示传递至函数的参数数组的名称。不需要将参数命名为 rest;它可以具有不同于关键字的任意名称。可以将 ...(rest) 参数的数据类型指定为 Array,但是这样可能会产生混淆,因为该参数可接受逗号分隔值列表,该列表与 Array 类的实例不同。
|
示例
如何使用示例
下例在两个不同函数中使用...(其余的)参数。第一个函数
traceParams 只对
rest 数组中每一个参数调用
trace() 函数。第二个函数
average() 调用参数列表并返回平均值。第二个函数还使用了该参数的其它名称
args。
package {
import flash.display.MovieClip;
public class RestParamExample extends MovieClip {
public function RestParamExample() {
traceParams(100, 130, "two"); // Output: 100,130,two
trace(average(4, 7, 13)); // Output: 8
}
}
}
function traceParams(... rest) {
trace(rest);
}
function average(... args) : Number{
var sum:Number = 0;
for (var i:uint = 0; i < args.length; i++) {
sum += args[i];
}
return (sum / args.length);
}
另请参见
定义核心 ActionScript 类的方法和属性,将其作为固定属性而非原型属性。将。ー-as3。ア编译器选项设置为 true(它是 Flex Builder 2 中的默认设置)时,将自动为所有核心类打开 AS3 命名空间。这意味着核心类的单个实例将使用固定的属性和方法,而不是使用同一属性和方法附加到此类的原型对象上的版本。使用固定属性通常可以提供更好的性能,但将无法向后兼容 ECMAScript 第 3 版语言规范 (ECMA-262)。
另请参见
用法
| Player 版本 : | Flash Player 9 |
出现在循环(for、for..in、for each..in、do..while 或 while)内,或出现在与 switch 语句中的特定情况相关联的语句块内。当在循环中使用时,break 语句指示 Flash 跳过循环体的其余部分,停止循环动作,并执行循环语句后面的语句。在 switch 中使用 break 语句时,该语句将指示 Flash 跳过此 case 块中的其余语句,并跳到包含它的 switch 语句后面的第一个语句。
在嵌套循环中,break 语句只跳过当前循环的其余部分,而不是中断整个系列的嵌套循环。若要中断整个系列的嵌套循环,请使用 label 或 try..catch..finally。
break 语句可以具有可选标签,该标签必须与外部标记语句相匹配。使用与外部语句的标签不匹配的标签是一种语法错误。可以使用标记的 break 语句中断多层嵌套循环语句、switch 语句,或 block 语句。有关示例,请参见 label 语句条目。
参数
示例
如何使用示例
下例使用
break 以退出一个循环(如果没有该语句,该循环为无限循环):
var i:int = 0;
while (true) {
trace(i);
if (i >= 10) {
break; // this will terminate/exit the loop
}
i++;
}
/* output:
0
1
2
3
4
5
6
7
8
9
10*/
另请参见
用法
| case jumpTarget: statements |
| Player 版本 : | Flash Player 9 |
定义 switch 语句的跳转目标。如果 jumpTarget 参数等于使用全等运算符 (===) 的 switch 语句的 expression 参数,则 Flash Player 将执行 statements 参数中的语句,直到遇到一个 break 语句或直到 switch 语句结束。
如果在 switch 语句外部使用 case 语句,会产生错误,而且脚本不能编译。
注意:始终用 break 语句结束 statements 参数。如果省略 statements 参数中的 break 语句,它将继续执行下一个 case 语句,而不是退出 switch 语句。
参数
| jumpTarget:* —
任何表达式。
|
| statements:* —
如果 jumpTarget 和 switch 语句中的条件表达式匹配,则执行语句。
|
示例
如何使用示例
下例定义了
switch 语句
thisMonth 的跳转目标。如果
thisMonth 等于
case 语句中的表达式,则执行该语句。
var thisMonth:int = new Date().getMonth();
switch (thisMonth) {
case 0 :
trace("January");
break;
case 1 :
trace("February");
break;
case 5 :
case 6 :
case 7 :
trace("Some summer month");
break;
case 8 :
trace("September");
break;
default :
trace("some other month");
}
另请参见
用法
| [dynamic] [public | internal] [final] class className [ extends superClass ] [ implements interfaceName[, interfaceName... ] ] {
// 此处是类定义
}
|
| Player 版本 : | Flash Player 9 |
定义一个类,它允许实例化共享您定义的方法和属性的对象。例如,如果您正开发一个发票跟踪系统,则可以创建一个 Invoice 类,它定义每个发票应具有的所有方法和属性。然后您可以使用 new Invoice() 命令来创建 Invoice 对象。
每个 ActionScript 源文件只能包含一个对其它源文件或脚本可见的类。外部可见的类可以是公共类或内部类,必须在包语句内定义。如果在同一个文件中包括其它类,则该类必须放在包语句之外、文件结尾处。
外部可见的类的名称必须与包含该类的 ActionScript 源文件的名称匹配。源文件名称必须是类的名称加上文件扩展名 .as。例如,如果您将一个类命名为 Student,则定义该类的文件必须被命名为 Student.as。
您不能嵌套类定义;即,不能在一个类定义内定义其它类。
可以定义构造函数方法,每次创建该类的新实例时执行该方法。该构造函数方法的名称必须与类的名称匹配。如果未定义构造函数方法,则为您创建一个默认的构造函数。
若要指示对象可在运行时添加和访问动态属性,请在 class 语句前面放置 dynamic 关键字。若要声明一个类实现一个接口,请使用 implements 关键字。若要创建一个类的子类,请使用 extends 关键字。(某一类只能扩展一个类,但可以实现多个接口。)您可以在一个语句中使用 implements 和 extends。下例将说明 implements 和 extends 关键字的典型用法:
class C implements Interface_i, Interface_j // OK
class C extends Class_d implements Interface_i, Interface_j // OK
class C extends Class_d, Class_e // not OK
参数
| className:Class —
类的完全限定名称。
|
示例
如何使用示例
下面的示例创建一个名为 Plant 的类。Plant 构造函数采用两个参数。
// Filename Plant.as
package {
public class Plant {
// Define property names and types
private var _leafType:String;
private var _bloomSeason:String;
// Following line is constructor
// because it has the same name as the class
public function Plant(param_leafType:String, param_bloomSeason:String) {
// Assign passed values to properties when new Plant object is created
_leafType = param_leafType;
_bloomSeason = param_bloomSeason;
}
// Create methods to return property values, because best practice
// recommends against directly referencing a property of a class
public function get leafType():String {
return _leafType;
}
public function get bloomSeason():String {
return _bloomSeason;
}
}
}
在脚本中,使用
new 运算符来创建一个 Plant 对象。
var pineTree:Plant = new Plant("Evergreen", "N/A");
// Confirm parameters were passed correctly
trace(pineTree.leafType);
trace(pineTree.bloomSeason);
另请参见
用法
| Player 版本 : | Flash Player 9 |
指定一个常量,它是只能赋值一次的变量。
附加后跟数据类型的 colon (:) 字符可以严格指定常量的类型。
参数
示例
如何使用示例
下例说明,如果尝试多次为一个常量赋值将发生错误。
const MIN_AGE:int = 21;
MIN_AGE = 18; // error
下例说明,如果常量是一个数组,仍然可以调用 Array 类方法,包括
Array.push()。但是无法分配新数组文本。
const product_array:Array = new Array("Studio", "Dreamweaver", "Flash", "ColdFusion", "Contribute", "Breeze");
product_array.push("Flex"); // array operations are allowed
product_array = ["Other"]; // assignment is an error
trace(product_array);
另请参见
用法
| Player 版本 : | Flash Player 9 |
跳过最内层循环中的所有剩余语句并开始循环的下一次遍历,就像控制正常传递到了循环结尾一样。continue 语句在循环外不起作用。在嵌套循环中,使用可选的 label 参数以跳过最内层以内的循环。
continue 语句可以具有可选标签,该标签必须与外部标记语句相匹配。使用与外部语句的标签不匹配的标签是一种语法错误。使用标记的 continue 语句可以跳过多层嵌套循环语句。
示例
如何使用示例
在下面的
while 循环中,
continue 语句用于遇到 3 的整数倍时跳过循环体的其余部分,并跳转到循环的顶端(在该处进行条件测试):
var i:int = 0;
while (i < 10) {
if (i % 3 == 0) {
i++;
continue;
}
trace(i);
i++;
}
在 for 循环中,还可以使用 continue 语句以跳过循环体的其余部分。在下例中,如果 i % 3 等于 0,则跳过 trace(i) 语句:
for (var i:int = 0; i < 10; i++) {
if (i % 3 == 0) {
continue;
}
trace(i);
}
另请参见
用法
| Player 版本 : | Flash Player 9 |
定义 switch 语句的默认情况。如果 switch 语句的 expression 参数不等于(使用全等运算符 [===])给定 switch 语句的 case 关键字后的任何 expression 参数,则执行这些语句。
switch 语句不需要 default case 语句。default case 语句也不一定要出现在列表的最后。如果在 switch 语句外使用 default 语句,将会产生错误,并且脚本不能编译。
参数
示例
如何使用示例
在下例中,如果某天是星期六或星期日,则不调用任何
case 语句,因此将转为执行
default 语句。
var dayOfWeek:int = new Date().getDay();
switch (dayOfWeek) {
case 1 :
trace("Monday");
break;
case 2 :
trace("Tuesday");
break;
case 3 :
trace("Wednesday");
break;
case 4 :
trace("Thursday");
break;
case 5 :
trace("Friday");
break;
default :
trace("Weekend");
}
另请参见
用法
| default xml namespace = ns
|
| Player 版本 : | Flash Player 9 |
default xml namespace 指令可将默认的命名空间设置为用于 XML 对象。
如果未设置 default xml namespace,则默认命名空间是未命名的命名空间(当 URI 设置为空字符串时)。default xml namespace 声明的作用域在函数块内,类似于变量的作用域。
示例
如何使用示例
下例说明
default xml namespace 的作用域是函数块:
var nsDefault1:Namespace = new Namespace("http://www.example.com/namespaces/");
default xml namespace = nsDefault1;
var x1:XML = <test1 />;
trace("x1 ns: " + x1.namespace());
scopeCheck();
var x2:XML = <test2 />;
trace("x2 ns: " + x2.namespace());
function scopeCheck(): void {
var x3:XML = <test3 />;
trace("x3 ns: " + x3.namespace());
var nsDefault2:Namespace = new Namespace("http://schemas.xmlsoap.org/soap/envelope/");
default xml namespace = nsDefault2;
var x4:XML = <test4 />;
trace("x4 ns: " + x4.namespace());
}
以下是本示例 trace() 的输出:
x1 ns: http://www.example.com/namespaces/
x3 ns:
x4 ns: http://schemas.xmlsoap.org/soap/envelope/
x2 ns: http://www.example.com/namespaces/
下例使用
default xml namespace 来分配默认的命名空间。因为第二个 XML 对象 (
x2) 定义了自己的默认命名空间,所以
x2 未使用此设置:
var nsDefault:Namespace = new Namespace("http://www.example.com/namespaces/");
default xml namespace = nsDefault;
var x1:XML = <test1 />;
trace(x1.namespace());
// http://www.example.com/namespaces/
var x2:XML = <test2 xmlns = "http://www.w3.org/1999/XSL/Transform/" />;
trace(x2.namespace());
// http://www.w3.org/1999/XSL/Transform/
var x3:XML = <test3 xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" />;
trace(x3.namespace());
// http://www.example.com/namespaces/
另请参见
用法
| do { statement(s) } while (condition) |
| Player 版本 : | Flash Player 9 |
与 while 循环类似,不同之处是在对条件进行初始计算前执行一次语句。随后,仅当条件计算结果是 true 时执行语句。
do..while 循环确保循环内的代码至少执行一次。尽管这也可以通过使用 while 循环在 while 循环开始前放置要执行的语句的副本来实现,但很多程序员认为 do..while 循环更易于阅读。
如果条件计算结果始终为 true,do..while 就会无限循环。如果进入了无限循环,则 Flash Player 会遇到问题,最终会发出警告信息,或播放器崩溃。如果知道要循环的次数,应该尽可能使用 for 循环。尽管 for 循环易于阅读和调试,但不是在所有情况下都能代替 do..while 循环。
参数
| condition:Boolean —
要计算的条件。只要 condition 参数的计算结果为 true,就会执行 do 代码块内的 statement(s)。
|
示例
如何使用示例
下例使用
do..while 循环以计算条件是否为
true,并跟踪
myVar,直到
myVar 大于等于 5。
myVar 大于等于 5 时,循环结束。
var myVar:Number = 0;
do {
trace(myVar);
myVar++;
}
while (myVar < 5);
/* output:
0
1
2
3
4
*/
另请参见
用法
| dynamic class className { // 此处是类定义 } |
| Player 版本 : | Flash Player 9 |
指定类的实例可具有在运行时添加的动态属性。如果在对类使用 dynamic 特性,可以在运行时向该类的实例添加属性。将未标记为 dynamic 的类视为密封的,这意味着无法向该类的实例添加属性。
如果类是密封的(非动态),尝试在类实例上获得属性或设置属性将导致错误。创建实例时,如果将编译器设置为严谨模式并指定数据类型,尝试向密封的对象添加属性将导致编译器错误;否则,将发生运行时错误。
dynamic 属性不是由子类继承。如果扩展了动态类,则只有声明该子类具有 dynamic 属性时,子类才是动态的。
注意:仅支持在外部脚本文件中使用此关键字,而不支持在用。ー动作。ア面板编写的脚本中使用此关键字。
示例
如何使用示例
下例创建了两个类,一个是命名为 Expando 的动态类,另一个是命名为 Sealed 的密封类,将在随后的示例中使用它们。
package {
dynamic class Expando {
}
class Sealed {
}
}
以下代码创建 Expando 类的实例,并说明可以向该实例添加属性。
var myExpando:Expando = new Expando();
myExpando.prop1 = "new";
trace(myExpando.prop1); // output: new
以下代码创建 Sealed 类的实例,并说明尝试添加属性将导致错误。
var mySealed:Sealed = new Sealed();
mySealed.prop1 = "newer"; // error
另请参见
用法
| if (condition) {
// 语句
}
else {
// 语句
} |
| Player 版本 : | Flash Player 9 |
指定当 if 语句中的条件返回 false 时运行的语句。如果仅执行一条语句,则无需使用花括号 ({}) 来括起要由 else 语句执行的语句。
参数
| condition:Boolean —
计算结果为 true 或 false 的表达式。
|
示例
如何使用示例
在下例中,
else 条件用于检查
age_txt 变量是大于还是小于 18:
if (age_txt.text>=18) {
trace("welcome, user");
}
else {
trace("sorry, junior");
userObject.minor = true;
userObject.accessAllowed = false;
}
在下例中,花括号
({}) 是不必要的,因为
else 语句后面只有一条语句:
if (age_txt.text>18) {
trace("welcome, user");
}
else trace("sorry, junior");
下例使用
if 和
else 语句的组合来对
score_txt 和特定的值进行比较:
if (score_txt.text>90) {
trace("A");
}
else if (score_txt.text>75) {
trace("B");
}
else if (score_txt.text>60) {
trace("C");
}
else {
trace("F");
}
另请参见
用法
| class className extends otherClassName {}
interface interfaceName extends otherInterfaceName {} |
| Player 版本 : | Flash Player 9 |
定义一个类以作为其它类的子类。子类继承超类中定义的所有方法、属性、函数等。无法扩展标记为 final 的类。
也可以使用 extends 关键字来扩展接口。扩展另一个接口的接口包含所有原接口的方法声明。
注意:若要使用此关键字,必须在 FLA 文件的。ー发布设置。ア对话框的。ーFlash。ア选项卡中指定 ActionScript 2.0 和 Flash Player 6 或更高版本。仅支持在外部脚本文件中使用此关键字,而不支持在用。ー动作。ア面板编写的脚本中使用此关键字。
参数
| className:Class —
您所定义的类的名称。
|
示例
如何使用示例
在下例中,Car 类扩展 Vehicle 类以便继承它的所有方法、属性和函数。如果您的脚本对 Car 对象进行实例化,则来自 Car 类的方法和来自 Vehicle 类的方法都可以使用。
下例显示名为 Vehicle.as 的文件(它定义 Vehicle 类)的内容:
package {
class Vehicle {
var numDoors:Number;
var color:String;
public function Vehicle(param_numDoors:Number = 2, param_color:String = null) {
numDoors = param_numDoors;
color = param_color;
}
public function start():void {
trace("[Vehicle] start");
}
public function stop():void {
trace("[Vehicle] stop");
}
public function reverse():void {
trace("[Vehicle] reverse");
}
}
}
下例说明同一目录中名为 Car.as 的第二个 ActionScript 文件。此类扩展 Vehicle 类,通过三种方式修改它。第一种是 Car 类添加变量
fullSizeSpare 以跟踪 car 对象是否具有标准尺寸的备用轮胎。第二种是它添加特定于汽车的新方法
activateCarAlarm(),该方法用于激活汽车的防盗警报。第三种是它覆盖
stop() 函数以添加 Car 类使用防抱死制动系统来停车的事实。
package {
public class Car extends Vehicle {
var fullSizeSpare:Boolean;
public function Car(param_numDoors:Number, param_color:String, param_fullSizeSpare:Boolean) {
numDoors = param_numDoors;
color = param_color;
fullSizeSpare = param_fullSizeSpare;
}
public function activateCarAlarm():void {
trace("[Car] activateCarAlarm");
}
public override function stop():void {
trace("[Car] stop with antilock brakes");
}
}
}
下例对 Car 对象进行实例化,调用在 Vehicle 类中定义的方法 (
start()),然后调用由 Car 类覆盖的方法 (
stop()),最后从 Car 类调用方法 (
activateCarAlarm()):
var myNewCar:Car = new Car(2, "Red", true);
myNewCar.start(); // output: [Vehicle] start
myNewCar.stop(); // output: [Car] stop with anti-lock brakes
myNewCar.activateCarAlarm(); // output: [Car] activateCarAlarm
使用 super 语句也可以编写 Vehicle 类的子类,此子类可以使用该语句访问超类的构造函数。下例显示第三个 ActionScript 文件,该文件名为 Truck.as,也在同一目录中。在构造函数和覆盖的 reverse() 方法中,Truck 类使用 super。
package {
class Truck extends Vehicle {
var numWheels:Number;
public function Truck(param_numDoors:Number, param_color:String, param_numWheels:Number) {
super(param_numDoors, param_color);
numWheels = param_numWheels;
}
public override function reverse():void {
beep();
super.reverse();
}
public function beep():void {
trace("[Truck] make beeping sound");
}
}
}
下例对 Truck 对象进行实例化,调用由 Truck 类覆盖的方法 (
reverse()),然后调用在 Vehicle 类中定义的方法 (
stop()):
var myTruck:Truck = new Truck(2, "White", 18);
myTruck.reverse(); // output: [Truck] make beeping sound [Vehicle] reverse
myTruck.stop(); // output: [Vehicle] stop
另请参见
用法
| Player 版本 : | Flash Player 9 |
表示 false 的布尔值。布尔值为 true 或 false;false 与 true 相反。
如果自动设置数据类型时将 false 转换为数字,则它变为 0;如果自动设置数据类型时将 false 转换为字符串,则它变为 "false"。
注意:字符串 "false" 转换为布尔值 true。
示例
如何使用示例
此示例说明自动设置数据类型如何将
false 转换为数字以及转换为字符串:
var bool1:Boolean = Boolean(false);
// converts it to the number 0
trace(1 + bool1); // outputs 1
// converts it to a string
trace("String: " + bool1); // outputs String: false
下例说明字符串 "false" 转换为布尔值 true:
trace(Boolean("false")); // output: true
if ("false") {
trace("condition expression evaluated to true");
}
else {
trace("condition expression evaluated to false");
}
// output: condition expression evaluated to true
另请参见
用法
|
final function methodName() {
// 此处是您的语句
}
final class className {} |
| Player 版本 : | Flash Player 9 |
指定不能覆盖方法或者不能扩展类。尝试覆盖方法或扩展类,并标记为 final 将导致错误。
参数
另请参见
定义 Proxy 类的方法。Proxy 类方法位于自己的命名空间内,这是为了避免在 Proxy 子类包含与任一 Proxy 类方法名称相匹配的实例方法名称时发生名称冲突。
另请参见
用法
| for ([init]; [condition]; [next]) {
// 语句
}
|
| Player 版本 : | Flash Player 9 |
计算一次 init(初始化)表达式,然后开始一个循环序列。循环序列从计算 condition 表达式开始。如果 condition 表达式的计算结果为 true,将执行 statement 并计算 next 表达式。然后循环序列再次从计算 condition 表达式开始。
如果只执行一条语句,则无需使用花括号 ({}) 来括起要由 for 语句执行的语句。
参数
| init —
在开始循环序列前要计算的可选表达式,通常为赋值表达式。还允许对此参数使用 var 语句。
|
| condition —
在开始循环序列前要计算的可选表达式,通常为比较表达式。如果表达式的计算结果为 true,则执行与 for 语句相关联的语句。
|
| next —
循环序列后要计算的可选表达式,通常是递增或递减表达式。
|
示例
如何使用示例
下例使用
for 在数组中添加元素:
var my_array:Array = new Array();
for (var i:Number = 0; i < 10; i++) {
my_array[i] = (i + 5) * 10;
}
trace(my_array); // output: 50,60,70,80,90,100,110,120,130,140
下例使用
for 重复执行相同的动作。在代码中,
for 循环将从 1 到 100 的数字相加。
var sum:Number = 0;
for (var i:Number = 1; i <= 100; i++) {
sum += i;
}
trace(sum); // output: 5050
下例说明,在仅执行一条语句时无需使用花括号 (
{}):
var sum:Number = 0;
for (var i:Number = 1; i <= 100; i++)
sum += i;
trace(sum); // output: 5050
另请参见
用法
|
for (variableIterant:String in object){
// 语句
} |
| Player 版本 : | Flash Player 9 |
遍历对象的动态属性或数组中的元素,并对每个属性或元素执行 statement。对象属性不按任何特定的顺序保存,因此属性看似以随机的顺序出现。固定属性,例如在类中定义的变量和方法,不能由 for..in 语句来枚举。若要获得固定属性列表,请使用 flash.utils 包中的 describeType() 函数。
参数
| variableIterant:String —
要作为迭代变量的变量的名称,迭代变量引用对象的每个属性或数组中的每个元素。
|
示例
如何使用示例
下面的示例使用
for..in 遍历对象的属性:
var myObject:Object = {firstName:"Tara", age:27, city:"San Francisco"};
for (var prop in myObject) {
trace("myObject."+prop+" = "+myObject[prop]);
}
/* output:
myObject.firstName = Tara
myObject.age = 27
myObject.city = San Francisco
*/
下面的示例将
typeof 运算符与
for..in 结合使用以遍历特定类型的子级:
var myObject:Object = {firstName:"Tara", age:27, city:"San Francisco"};
for (var name in myObject) {
if (typeof (myObject[name]) == "string") {
trace("I have a string property named "+name);
}
}
/* output:
I have a string property named city
I have a string property named firstName
*/
另请参见
用法
| for each (variableIterant in object){
// 语句
} |
| Player 版本 : | Flash Player 9 |
遍历集合的项目,并对每个项目执行 statement。for each..in 语句作为 E4X 语言扩展的一部分引入,不仅可以用于 XML 对象,而且可以用于对象和数组。for each..in 语句仅遍历对象的动态属性,而不是固定属性。固定属性是指定义为类定义的一部分的属性。若要使用具有用户自定义类的实例的 for each..in 语句,则必须声明具有 dynamic 属性的类。
与 for..in 语句不同,for each..in 语句将遍历对象属性的值,而不是属性的名称。
参数
| variableIterant:* —
要作为迭代变量的变量的名称引用集合中的项。
|
| object:Object —
要遍历的集合的名称。集合可以是 XML 对象、通用对象或数组。
|
示例
如何使用示例
下例使用
for each..in 遍历对象的属性具有的值:
var myObject:Object = {firstName:"Tara", age:27, city:"San Francisco"};
for each (var item in myObject) {
trace(item);
}
/* output:
Tara
27
San Francisco
*/
下面的示例使用
for each..in 遍历数组的元素:
var myArray:Array = new Array("one", "two", "three");
for each(var item in myArray)
trace(item);
/* output:
one
two
three
*/
下面的示例将
is 运算符与
for each..in 结合使用以遍历特定类型的子级:
var myObject:Object = {firstName:"Tara", age:27, city:"San Francisco"};
for each (var item in myObject) {
if (item is String) {
trace("I have a string property with value " + item);
}
}
/* output:
I have a string property with value Tara
I have a string property with value San Francisco
*/
下例说明使用
for each..in 遍历 XMLList 对象中的属性 (
doc.p):
var doc:XML =
<body>
<p>Hello</p>
<p>Hola</p>
<hr />
<p>Bonjour</p>
</body>;
for each (var item in doc.p) {
trace(item);
}
/* output:
Hello
Hola
Bonjour
*/
另请参见
用法
| function functionName([parameter0, parameter1,...parameterN]) : returnType{
// 语句
}
var functionName:Function = function ([parameter0, parameter1,...parameterN]) : returnType{
// 语句
}
|
| Player 版本 : | Flash Player 9 |
包含为执行特定任务而定义的一组语句。可以在 SWF 文件的一个位置定义函数,然后在该位置调用它或从 SWF 文件的其它脚本中调用 它。定义函数时,还可以为其指定参数。参数是函数要对其进行操作的值的占位符。可以在每次调用一个函数时传递不同的参数,这样就可将一个函数重复用于不同的情况。
在一个函数的 statement(s) 块中使用 return 语句,以生成函数或返回 一个值。
用法 1:可以使用 function 关键字来定义具有特定函数名称、参数和语句的函数。当脚本调用函数时,就会执行函数定义中的语句。允许提前引用;在同一脚本中,函数可以先调用后声明。一个函数定义会替换同一函数以前的所有定义。只要是允许使用语句的地方就可使用此语法。
用法 2:您也可以使用 function 来创建匿名函数并返回对它的引用。此语法用于表达式中,对于在对象中安装方法尤其有用。
若需要其它功能,可以在函数定义中使用 arguments 对象。通常使用 arguments 对象来创建一个接受可变数量的参数的函数和递归的匿名函数。
参数
| functionName:Function —
新函数的名称。
|
| returnType:* —
返回值的数据类型。
|
示例
如何使用示例
下例定义了函数
sqr,此函数将返回数字的平方值:
function sqr(xNum:Number) {
return Math.pow(xNum, 2);
}
var yNum:Number = sqr(3);
trace(yNum); // output: 9
如果在同一脚本中定义和使用函数,使用该函数后可出现函数定义:
var yNum:Number = sqr(3);
trace(yNum); // output: 9
function sqr(xNum:Number) {
return Math.pow(xNum, 2);
}
另请参见
用法
|
function get property() : returnType{
// 此处是您的语句
} |
| Player 版本 : | Flash Player 9 |
定义一个 getter,它是一种可像属性一样读取的方法。getter 是一个特殊的函数,它将返回使用 var 或 const 关键字声明的属性的值。与其它的方法不同,调用 getter 时不使用括号 (()),这样 getter 看起来就像是变量。
通过允许创建私有属性的公共接口,getter 允许您应用信息隐藏规则。信息隐藏的好处是:即使私有属性的基础实现发生更改,公共接口也会保持不变。
getter 的另一个优点是它们可在子类中覆盖,而使用 var 或 const 声明的属性则不能。
可结合使用 getter 和 setter 创建读写属性。要创建只读属性,请创建一个没有对应 setter 的 getter。要创建只写属性,请创建一个没有对应 getter 的 setter。
注意:若要使用此关键字,必须在 FLA 文件的。ー发布设置。ア对话框的。ーFlash。ア选项卡中指定 ActionScript 2.0 和 Flash Player 6 或更高版本。仅支持在外部脚本文件中使用此关键字,而不支持在用。ー动作。ア面板编写的脚本中使用此关键字。
参数
| property:* —
get 访问的属性的标识符;此值必须与相应 set 命令中使用的值相同。
|
| returnType:* —
返回值的数据类型。
|
示例
如何使用示例
下例定义
Team 类。
Team 类包括用于在该类内检索和设置属性的 getter 和 setter 方法:
package {
public class Team {
var teamName:String;
var teamCode:String;
var teamPlayers:Array = new Array();
public function Team(param_name:String, param_code:String) {
teamName = param_name;
teamCode = param_code;
}
public function get name():String {
return teamName;
}
public function set name(param_name:String):void {
teamName = param_name;
}
}
}
在脚本中输入下面的代码:
var giants:Team = new Team("San Fran", "SFO");
trace(giants.name);
giants.name = "San Francisco";
trace(giants.name);
/* output:
San Fran San Francisco */
在跟踪 giants.name 时,使用 getter 方法以返回属性的值。
另请参见
用法
| Player 版本 : | Flash Player 9 |
计算条件以确定下一条要执行的语句。如果条件为 true,则 Flash Player 将运行花括号 ({}) 内条件后面的语句。如果条件为 false,则 Flash Player 将跳过花括号内的语句,并运行花括号后面的语句。将 if 语句与 else 语句一起使用,以在脚本中创建分支逻辑。
如果仅执行一条语句,则无需使用花括号 ({}) 来括起要由 if 语句执行的语句。
参数
| condition:Boolean —
计算结果为 true 或 false 的表达式。
|
另请参见
用法
| myClass implements interface01 [, interface02 , ...] |
| Player 版本 : | Flash Player 9 |
指定一个类可实现一个或多个接口。当类实现一个接口时,此类必须定义在该接口中声明的所有方法。将所有实现接口的类的实例视为由接口定义的数据类型的成员。因此,第一个操作数是类实例且第二个操作数是接口时,is 运算符将返回 true;此外,接口操作将定义来自和施于数据类型的类型强制。注意:若要使用此关键字,必须在 FLA 文件的。ー发布设置。ア对话框的。ーFlash。ア选项卡中指定 ActionScript 2.0 和 Flash Player 6 或更高版本。仅支持在外部脚本文件中使用此关键字,而不支持在用。ー动作。ア面板编写的脚本中使用此关键字。
另请参见
用法
|
导入 packageName.className
导入 packageName.* |
| Player 版本 : | Flash Player 9 |
使外部定义的类和包可用于您的代码。例如,如果希望在脚本中使用 flash.display.Sprite 类,则必须导入它。此要求与 ActionScript 的先前版本不同,在这些版本中 import 指令是可选的。
使用 import 指令后,可以使用完整的类名称,此名称包含包名称,或只是类的名称。
import flash.display.Sprite;
// name of class only
var mySprite:Sprite = new Sprite();
// full class name
var mySprite:flash.display.Sprite = new flash.display.Sprite();
如果要访问的包中有多个类,可以用一条语句将它们全部导入,如下例所示:
import 指令仅导入类、函数和位于导入包顶级的变量。必须显式导入嵌套包。
如果导入一个类,但没有在脚本中使用该类,则该类不作为 SWF 文件的一部分导出。这意味着您导入大型包时可以不必担心 SWF 文件的大小;只有在实际使用某一类的情况下,才会在 SWF 文件中包括与该类关联的字节码。导入类的一个缺点是将增加名称冲突的可能性。
import 指令仅应用于调用它的当前脚本(帧或对象)。例如,假设您在某个 Flash 文档的第 1 帧上导入了 adobe.example 包中的所有类。那么,在那一帧上则可以使用简单类名来引用该包中的类。
// 在 FLA 的第一帧上:
导入 adobe.example.*;
var myFoo:foo = new foo();
但在其它帧脚本中,仍需要使用完全限定名来引用该包中的类 (var myFoo:foo = new adobe.example.foo();),或在其它帧上添加一条 import 指令以导入该包中的类。
参数
| packageName:* —
在单独类文件中定义的包的名称。
|
| className:Class —
在单独类文件中定义的类的名称。
|
另请参见
用法
| include "[path]filename.as" |
包括指定文件的内容,就像该文件中的命令是调用脚本的一部分一样。include 指令在编译时调用。因此,如果对包含的文件进行了任何更改,则必须保存该文件,并重新编译使用它的任何 SWF 文件。
另请参见
用法
| interface InterfaceName [extends InterfaceName ] {} |
| Player 版本 : | Flash Player 9 |
定义接口。接口是定义一个方法组的数据类型,其中的方法必须由实现接口的任何类定义。
接口与类相似,但也有以下重要差异:
- 接口仅包含方法的声明,而不包含其实现。也就是说,实现接口的每个类必须为该接口中声明的每个方法提供实现。
- 接口方法定义无法具有任何属性,例如
public 或 private,但是在实现接口的类的定义中,实现的方法必须标记为 public。
- 多个接口可以通过
extends 语句由接口继承,或通过 implements 语句由类继承。
与 ActionScript 2.0 不同,ActionScript 3.0 允许在接口定义中使用 getter 和 setter 方法。
注意:若要使用此关键字,必须在 FLA 文件的。ー发布设置。ア对话框的。ーFlash。ア选项卡中指定 ActionScript 2.0 和 Flash Player 6 或更高版本。仅支持在外部脚本文件中使用此关键字,而不支持在用。ー动作。ア面板编写的脚本中使用此关键字。
另请参见
用法
|
[internal] var varName
[internal] const kName
[internal] function functionName() {
// 此处是您的语句
}
[internal] class className{
// 此处是您的语句
}
[internal] namespace nsName
|
| Player 版本 : | Flash Player 9 |
指定类、变量、常量或函数可用于同一包中的任何调用者。默认情况下,类、属性和方法属于 internal 命名空间。
参数
| className:Class —
要指定为内部的类的名称。
|
| varName:* —
要指定为内部的变量的名称。无论该变量是否是类的一部分,都可以应用 internal 属性。
|
| kName:* —
要指定为内部的常量的名称。无论该常量是否是类的一部分,都可以应用 internal 属性。
|
| functionName:Function —
要指定为内部的函数或方法的名称。无论该函数是否是类的一部分,都可以应用 internal 属性。
|
| nsName:Namespace —
要指定为内部的命名空间的名称。无论该命名空间是否是类的一部分,都可以应用 internal 属性。
|
另请参见
用法
| label: statement
label: {
语句
} |
| Player 版本 : | Flash Player 9 |
将语句与可由 break 或 continue 引用的标识符相关联。在嵌套循环中,未引用标签的 break 或 continue 语句仅会跳过下一循环的其余部分,而不是跳过整个系列的循环。但是,如果定义整个系列循环的语句具有相关联的标签,则 break 或 continue 语句通过引用该标签可以跳过整个系列的循环。
标签还允许您跳出块语句。除非块语句是循环的一部分,否则无法放置未在该块语句内引用标签的 break 语句。如果块语句有相关联的标签,则可以放置在该块语句内部引用该标签的 break 语句。
参数
| label:* —
要与语句相关联的有效标识符。
|
| statements:* —
要与标签相关联的语句。
|
示例
如何使用示例
下例说明如何使用嵌套循环的标签来跳出整个系列的循环。代码使用嵌套循环以生成从 0 到 99 的数字列表。在数字即将达到 80 前产生
break 语句。如果
break 语句未使用
outerLoop 标签,则代码将仅跳过下一循环的其余部分并,且代码将继续输出从 90 到 99 的数字。然而,因为使用了
outerLoop 标签,
break 语句将跳过整个系列循环的其余部分,最后输出的数字是 79。
outerLoop: for (var i:int = 0; i < 10; i++) {
for (var j:int = 0; j < 10; j++) {
if ( (i == 8) && (j == 0)) {
break outerLoop;
}
trace(10 * i + j);
}
}
/* output:
1
2
...
79
*/
下例说明如何使用块语句的标签。在下例中,块语句标记为 foo,它允许 break 语句跳过块中的最后语句:
foo: {
trace("a");
break foo;
trace("b");
}
// output: a
另请参见
用法
| Player 版本 : | Flash Player 9 |
允许您控制定义的可见性。预定义的命名空间包括 public、private、protected 和 internal(这些特定命名空间也称为。ー访问控制说明符。ア,有关。ー类属性 (property) 的属性 (attributes)。ア的文档中讨论了这些命名空间。如果这些预定义的命名空间无法满足您的要求,您可以定义自定义命名空间。
下列步骤说明如何创建、应用和引用自定义命名空间:
- 首先,使用
namespace 关键字来定义自定义命名空间。例如,代码 namespace version1 将创建名为 version1 的命名空间。
- 其次,在属性或方法的声明中使用自定义命名空间将此命名空间应用于属性或方法。例如,代码
version1 myProperty:String 将创建名为 myProperty 的属性,它属于 version1 命名空间
- 最后,通过使用
use 关键字或使用命名空间作为标识符的前缀来引用该命名空间。例如,代码 use namespace version1; 引用后续代码行的 version1 命名空间,而代码 version1::myProperty 引用 myProperty 属性的 version1 命名空间。
参数
| name:Namespace —
命名空间的名称,可以是任意合法的标识符。
|
| uri:String —
命名空间的统一资源标识符 (URI)。这是一个可选参数。
|
另请参见
用法
|
native function functionName();
class className{
native function methodName();
} |
| Player 版本 : | Flash Player 9 |
指定函数或方法由 Flash Player 以本机代码的形式实现。Flash Player 内部使用 native 关键字来声明 ActionScript 应用程序接口 (API) 中的函数和方法。在您自己的代码中无法使用此关键字。
用法
| Player 版本 : | Flash Player 9 |
一个可以分配给变量的或由未提供数据的函数返回的特殊值。您可以使用 null 表示缺少的或不具有已定义数据类型的值。
不要将值 null 与特殊值 undefined 相混淆。使用等于运算符 (==) 对 null 和 undefined 进行比较时,它们的比较结果为相等。但是,使用全等运算符 (===) 对 null 和 undefined 进行比较时,它们的比较结果为不相等。
示例
如何使用示例
下例检查索引数组的前六个值,如果没有设置值(如果
value == null),则输出一条消息:
var testArray:Array = new Array();
testArray[0] = "fee";
testArray[1] = "fi";
testArray[4] = "foo";
for (i = 0; i < 6; i++) {
if (testArray[i] == null) {
trace("testArray[" + i + "] == null");
}
}
/* output:
testArray[2] == null
testArray[3] == null
testArray[5] == null
*/
另请参见
定义 ObjectProxy 类的方法。ObjectProxy 类的方法位于自己的命名空间内,从而避免了 Proxy 子类中实例方法的名称与 Proxy 类的方法名称相匹配时,发生名称冲突。
用法
|
override function name() {
// 此处是您的语句
}
|
| Player 版本 : | Flash Player 9 |
指定用一种方法替换继承的方法。若要覆盖继承的方法,则必须使用 override 属性,并确保名称、数字、参数类型和返回类型完全匹配。在未使用 override 属性的情况下尝试覆盖方法是错误的。同样的,如果方法没有匹配的继承方法,则使用 override 属性也是错误的。
无法对下列任一项使用 override 属性:
- 变量
- 常量
- 静态方法
- 未继承的方法
- 实施接口方法的方法
- 超类中标记为
final 的继承方法
尽管不能覆盖使用 var 或 const 声明的属性,但是通过使基类属性为 getter-setter,并覆盖使用 get 和 set 定义的方法,可以实现类似的功能。
参数
另请参见
用法
|
package packageName {
class someClassName{
}
} |
| Player 版本 : | Flash Player 9 |
允许您将代码组织为可由其它脚本导入的离散组。您必须使用 package 关键字以指示类是包的成员。
参数
另请参见
用法
|
class className{
private var varName;
private const kName;
private function methodName() {
// 此处是您的语句
}
private namespace nsName;
} |
| Player 版本 : | Flash Player 9 |
指定变量、常量或方法仅可供声明或定义它的类使用。与在 ActionScript 2.0 中的情况不同,在 ActionScript 3.0 中,private 不再提供对子类的访问。此外,private 限制编译时和运行时的访问。默认情况下,变量和函数对同一包中的任何调用者均可用。使用此关键字可以限制对变量或函数的访问。
您只能在类定义中使用此关键字,不能在接口定义中使用。无法将 private 应用于类或任何其它包级定义。
参数
| varName:* —
要指定为私有的变量的名称。仅当该变量位于类内部时,才可以应用 private 属性。
|
| kName:* —
要指定为私有的常量的名称。仅当该常量位于类内部时,才可以应用 private 属性。
|
| methodName:Function —
要指定为私有的方法的名称。仅当该方法位于类内部时,才可以应用 private 属性。
|
| nsName:Namespace —
要指定为私有的命名空间的名称。仅当该命名空间位于类内部时,才可以应用 private 属性。
|
示例
如何使用示例
下例演示如何使用
private 关键字来隐藏类中的某些属性。
class A {
private var alpha:String = "visible only inside class A";
public var beta:String = "visible everywhere";
}
class B extends A {
function B() {
alpha = "Access attempt from subclass"; // error
}
}
因为 alpha 是私有变量,从 A 类的外部无法访问它,即使从子类 B 中也无法访问。尝试访问私有变量将生成错误。
另请参见