语句 变量 delete 语句
delete reference
破坏由 reference 参数指定的对象引用,如果成功删除了引用,则返回 true;否则返回 false。该运算符对于释放脚本所用的内存非常有用。可以用 delete 运算符删除对对象的引用。删除所有对对象的引用后,Flash Player 会删除该对象并释放由该对象使用的内存。
虽然 delete 是一个运算符,但它通常作为语句使用,如以下示例所示:
delete x;
如果 reference 参数不存在或无法删除,delete 运算符将失败并返回 false。您不能删除预定义的对象和属性,也不能删除使用 var 语句在函数内声明的变量。不能使用 delete 运算符删除影片剪辑
set variable 语句
set("variableString",expression)
为变量赋值。variable 是保存数据的容器。容器始终不变,但内容可以更改。通过在 SWF 文件播放时更改变量的值,可以记录和保存关于用户操作的信息、记录 SWF 文件播放时更改的值,或者计算某个条件是 true 还是 false。
变量可以保存任何类型的数据(例如,字符串、数字、布尔值、对象或影片剪辑)。每个 SWF 文件和影片剪辑的时间轴都有其自己的变量集,每个变量又都有其自己的独立于其它时间轴上的变量的值。
set 语句中不支持严格数据类型指定。如果使用此语句将某个变量设置为一个值,而该值的数据类型与类文件中与该变量关联的数据类型不同,则不生成编译器错误。
需要牢记的一个细微而重要的区别是:参数 variableString 是字符串,而不是变量名。如果将一个现有的变量名作为第一个参数传递给 set() 而没有用引号("")将名称括起来,则会首先计算该变量,然后将 expression 的值赋予它。例如,如果创建一个名为 myVariable 的字符串变量并且对它赋值"Tuesday",然后忘了使用引号,就会不小心创建一个名为 Tuesday 的新变量,它包含您想分配给 myVariable 的值:
var 语句
var variableName [= value1][...,variableNameN[=valueN]]
用于声明局部变量。如果变量是在函数内声明的,则这些变量是局部变量。它们是为该函数声明的,在函数调用结束时到期。更具体地说,用 var 定义的变量是包含它的代码块的局部变量。代码块是用花括号 ({}) 区分的。
如果在函数外声明变量,变量在包含该语句的整个时间轴中可用。
您不能将范围限于另一个对象的变量声明为局部变量
with 语句
with (object:Object) {
statement(s);
}
允许您使用 object 参数指定一个对象(例如影片剪辑),并使用 statement(s) 参数计算该对象内的表达式和动作。这可以使您不必重复书写对象的名称或路径。
object 参数变为在其中读取 statement(s) 参数中的属性、变量和函数的上下文。例如,如果 object 是 my_array,并且指定的两个属性为 length 和 concat,则这些属性自动作为 my_array.length 和 my_array.concat 读取。在另一个示例中,如果 object 是 state.california,则 with 语句内部的任何动作或语句将从 california 实例的内部调用。
若要查找 statement(s) 参数中某个标识符的值,ActionScript 将从 object 指定的范围链的开头开始查找,并按照特定的顺序在范围链的每个级别中搜索该标识符
类构造 class 定义一个自定义类,通过该自定义类可以实例化共享您定义的方法和属性的对象。例如,如果您正开发一个发票跟踪系统,则可以创建一个发票类,它定义每一发票应具有的所有方法和属性。然后您可以使用 new invoice() 命令来创建发票对象。
该类的名称必须与包含该类的外部文件的名称匹配。外部文件名称必须是类的名称加上文件扩展名 .as。例如,如果您将一个类命名为 Student,则定义该类的文件必须被命名为 Student.as。
如果类在包中,类声明必须用形式为 base.sub1.sub2.MyClass 的完全限定的类名称。同时,该类的 AS 文件必须以反映该包结构的目录结构存储在路径中,例如 base/sub1/sub2/MyClass.as。如果类定义的形式为"class MyClass",则它位于默认包中,并且 MyClass.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
dynamic 语句
dynamic class className [ extends superClass ] [ implements interfaceName[, interfaceName... ] ] {
// class definition here
}
指明基于所指定类的对象可以在运行时添加和访问动态属性。
对于动态类的类型检查比对于非动态类的类型检查更为宽松,因为在类定义内访问的成员和在类实例上访问的成员不与在类范围内定义的那些成员进行比较。但是,仍可能对类成员函数进行类型检查,以确定返回类型和参数类型。当处理 MovieClip 对象时,此行为特别有用,因为这种情况下可以通过多种不同的方法动态地将属性和对象添加到影片剪辑,如 MovieClip.createEmptyMovieClip() 和 MovieClip.createTextField()。
动态类的子类也是动态的。
确保在声明对象时指定类型,如下所示:
var x:MyClass = new MyClass();
extends 语句
class className extends otherClassName {}
interface interfaceName extends otherInterfaceName {}
定义一个类,它是另一个类(超类)的子类。子类继承超类中定义的所有方法、属性、函数等。
接口也可以使用 extends 关键字扩展。扩展另一个接口的接口包括原接口的所有方法声明
get 语句
function get property () {
// your statements here
}
允许隐式获取 与某些对象关联的属性,这些对象基于外部类文件中定义的类。通过使用隐式获取方法,您可以不必直接访问属性就访问对象的属性。隐式 get/set 方法是对 ActionScript 1.0 中 Object.addProperty() 方法的句法简化。
implements 语句
myClass implements interface01 [, interface02 , ...]
指定类必须定义所实现的接口中声明的所有方法
import 语句
import className
import packageName.*
使您不必指定类的完全限定名就可以访问类。例如,如果您要在脚本中使用自定义类 macr.util.users.UserClass,则必须通过其全限定名引用它或导入它;如果您导入该类,则可以通过类名称引用它:
// before importing
var myUser:macr.util.users.UserClass = new macr.util.users.UserClass();
// after importing
import macr.util.users.UserClass;
var myUser:UserClass = new UserClass();
interface 语句
interface InterfaceName [extends InterfaceName ] {}
定义接口。接口与类相似,但也具有以下重要差异:
接口仅包含方法的声明,而不包含其实现。也就是说,实现接口的每个类必须为该接口中声明的每个方法提供实现。
在接口定义中只允许全局成员,不允许实例或类成员。
在接口定义中不允许使用 get 和 set 语句。
intrinsic 语句
intrinsic class className [extends superClass] [implements interfaceName [, interfaceName...] ] {
//class definition here
}
允许对以前定义的类执行编译时类型检查。Flash 使用内部类声明来启用对内置类(如 Array、Object 和 String)的编译时类型检查。此关键字向编译器指示不需要函数实现,而且不应该为它生成字节码。
intrinsic 关键字也可以与变量和函数声明一起使用。Flash 使用此关键字来允许对全局函数和属性执行编译时类型检查。
intrinsic 关键字是专为对内置类和对象以及全局变量和函数启用编译时类型检查而创建的。此关键字不用于一般目的,但是对于试图允许对以前定义的类(尤其是使用 ActionScript 1.0 定义的类)执行编译时类型检查的开发人员可能有一些价值。
仅支持在外部脚本文件中使用此关键字,而不支持在用"动作"面板编写的脚本中使用此关键字。
可用性:Flash Player 6;ActionScript 2.0
private 语句
class someClassName{
private var name;
private function name() {
// your statements here
}
}
指定变量或函数只对声明或定义该变量或函数的类或该类的子类可用。默认情况下,变量和函数对任何调用者都可用。使用此关键字可以限制对变量或函数的访问。此关键字旨在作为一种软件开发帮助手段,以促进良好的代码编写方法(例如封装),而不是用于隐藏或保护敏感数据的一种安全机制。不必在运行时阻止对变量的访问。
您只能在类定义中使用此关键字,不能在接口定义中使用
public 语句
class someClassName{
public var name;
public function name() {
// your statements here
}
}
指定变量或函数对任何调用者都可用。因为默认情况下变量和函数是公共的,所以使用此关键字主要是出于格式上的原因。例如,在包含 private 或 static 变量的代码块中,您可能要使用此关键字来保持格式一致。
set 语句
function set property(varName) {
// your statements here
}
允许隐式设置与某些对象关联的属性,这些对象基于外部类文件中定义的类。通过使用隐式设置方法,您可以不必直接访问对象属性就改变其属性值。隐式 get/set 方法是对 ActionScript 1.0 中 Object.addProperty() 方法的句法简化
static 语句
class someClassName{
static var name;
static function name() {
// your statements here
}
}
指定某个变量或函数只为每个类创建一次,而不是在基于该类的每个对象中都创建。
您可以通过使用语法 someClassName.name 在不创建类的实例的情况下访问静态类成员。如果您确实创建类的实例,也可以使用该实例访问静态成员,但只能通过访问静态成员的非静态函数来访问。
您只能在类定义中使用此关键字,不能在接口定义中使用
super 语句
super.method([arg1, ..., argN])
super([arg1, ..., argN])
第一种语法格式可以在对象方法体内使用,用于调用方法的超类版本,而且可以选择向超类方法传递参数 (arg1 ... argN)。这对于创建某些子类方法很有用,这些子类方法在向超类方法添加附加行为的同时,又调用这些超类方法执行其原始行为。
第二种语法格式可以用于构造函数体内,用以调用此构造函数的超类版本,而且可以选择向它传递参数。这对于创建子类很有用,该子类在执行附加的初始化的同时,又调用超类构造函数执行超类初始化
条件循环 2 break 语句
break
出现在循环(for、for..in、do..while 或 while)内或与 switch 语句中的特定情况相关的语句块内。当在循环中使用时,break 语句指示 Flash 跳过循环体的其余部分,停止循环动作,并执行循环语句后面的语句。当在 switch 中使用时,break 语句指示 Flash 跳过此 case 块中的其余语句,并跳到包含它的 switch 语句后面的第一个语句。
在嵌套循环中,break 语句只跳过当前循环的其余部分,而不是跳出整个系列的嵌套循环。关于跳出整个系列的嵌套循环,请参见 try..catch..finally
case 语句
case expression : statement(s)
定义 switch 语句的条件。如果 expression 参数全等于 (===) switch 语句的 expression 参数,则 Flash Player 将执行 statement(s) 中的语句,直到遇到一个 break 语句或直到 switch 语句结束。
如果在 switch 语句外部使用 case 语句,会产生错误,而且脚本不能编译。
注意:应始终用 break 语句来结束 statement(s) 参数。如果从 statement(s) 参数中省略 break statement,它将继续执行下一个 case 语句,而不是退出 switch 语句