现在的位置: 首页 > 综合 > 正文

FLEX 语法

2013年08月07日 ⁄ 综合 ⁄ 共 10083字 ⁄ 字号 评论关闭

 

break    

用法

 

break [label]

出现在一个循环(forfor..infor each..indo..whilewhile)中,或者出现在与 switch 语句内特定的 case 相关联的语句块中。当在循环中使用时,break 语句指示 Flash 跳过循环体的其余部分,停止循环动作并执行循环语句后面的语句。当在 switch 中使用时,break 语句指示 Flash 跳过该 case 块中的其余语句,跳到包含它的 switch 语句后面的第一个语句。

在嵌套循环中,break 只跳过当前循环的其余部分,而不是跳出整个系列的嵌套循环。要跳出整个系列的嵌套循环,请使用 labeltry..catch..finally

break 语句可以选择标签,但该标签必须与外部标记语句匹配。如果使用的标签与外部语句的标签不匹配,则属于语法错误。带标记的 break 语句可以用于跳出多层嵌套循环语句、switch 语句或 block 语句。有关示例,请参阅 label 语句的条目。

参数

  label:* — 与语句相关联的标签的名称。

示例

以下示例使用 break 退出循环(如果没有此语句,则该循环为无限循环):

var i:int = 0; 
while (true) {
trace(i);
if (i >= 10) {
break; // this will terminate/exit the loop
}
i++;
}
case    

用法

 
case jumpTarget: statements

定义 switch 语句的跳跃目标。如果 jumpTarget 参数等于 switch 语句的 expression 参数(使用全等 (===) 运算),则 Flash Player 将执行 statements 参数中的语句,直到遇到 break 语句或到达 switch 语句的结尾。

如果在 switch 语句外部使用 case 语句,将会产生错误,并且脚本无法编译。

注意:应始终使用 break 语句来结束 statements 参数。如果在 statements 参数中省略 break 语句,它将继续执行下一个 case 语句,而不是退出 switch 语句。

参数

  jumpTarget:* — 任何表达式。
  statements:* — 当 jumpTargetswitch 语句中的条件表达式匹配时要执行的语句。

示例

以下示例定义 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");
}
continue    

用法

 
continue [label]

跳过最里层循环中剩余的所有语句并开始循环的下一个迭代,就像控件正常传递到了循环结尾一样。continue 语句在循环外部时无作用。在嵌套循环中,使用可选的 label 参数不只可以跳过最里层的循环。

continue 语句可以选择使用标签,但该标签必须与外部标记语句匹配。如果使用的标签与外部语句的标签不匹配,则属于语法错误。标记的 continue 语句可用于跳出多层嵌套循环语句。

示例

在下面的 while 循环中,只要遇到 3 的倍数,就使用 continue 语句跳过循环体的其余部分,并跳到循环的顶端(在此处测试条件):

var i:int = 0; 
while (i < 10) {
if (i % 3 == 0) {
i++;
continue;
}
trace(i);
i++;
}
default    

用法

 
default: statements

定义 switch 语句的默认 case。如果 switch 语句的 expression 参数(使用全等 [===] 运算)不等于给定 switch 语句的 case 关键字后面的任何 expression 参数,则执行该语句。

switch 语句不要求一定有 default case 语句。default case 语句也不一定出现在列表的最后。如果在 switch 语句外部使用 default 语句,将会产生错误,并且脚本无法编译。

参数

  statements:* — 任何语句。

示例

在下面的示例中,如果 day of the week 是 Saturday 或 Sunday,则不应用任何 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");
}
do..while    

用法

 
do { statement(s) } while (condition)

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);
else    

用法

 
if (condition) { 
// statement(s)
}
else {
// statement(s)
}

指定当 if 语句中的条件返回 false 时要运行的语句。如果要执行的语句只有一条,则用来括起要由 else 语句执行的语句的大括号 ({}) 是不必要的。

参数

  condition:Boolean — 一个计算结果为 truefalse 的表达式。

示例

以下示例使用 ifelse 语句的组合将 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");
}
for    

用法

 
for ([init]; [condition]; [next]) { 
// statement(s)
}

计算一次 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);
for..in    

用法

 
for (variableIterant:String in object){ 
// statement(s)
}

迭代对象的动态属性或数组中的元素,并对每个属性或元素执行 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]);
}
for each..in    

用法

 
for each (variableIterant in object){ 
// statement(s)
}

遍历集合中的所有项目,并对每个项目执行 statementfor 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);
}
if    

用法

 
if (condition) {
// statement(s)
}

计算条件以确定要执行的下一条语句。如果条件为 true,Flash Player 将运行该条件后面大括号 ({}) 内的语句。如果条件为 false,Flash Player 将跳过大括号内的语句,而运行大括号后面的语句。将 if 语句与 else 语句一起使用可在脚本中创建分支逻辑。

如果要执行的语句只有一条,则用来括起要由 if 语句执行的语句的大括号 ({}) 是不必要的。

参数

  condition:Boolean — 一个计算结果为 truefalse 的表达式。

label    

用法

 
label: statement
label: {
statements
}

将语句与可由 breakcontinue 引用的标识符相关联。在嵌套循环中,不引用标签的 breakcontinue 语句只跳过当前循环的其余部分,而不是跳出整个系列的循环。然而,如果定义整个循环系列的语句具有相关联的标签,则 breakcontinue 语句通过引用该标签便可以跳过整个系列的循环。

您还可以使用标签跳出块语句。仅当块语句为循环的一部分时,才可以将不能引用标签的 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);
}
}
return    

用法

 
function functionName () {
return [expression]
}

立即将执行结果返回到调用函数。如果 return 语句后面是一个表达式,则计算该表达式并返回结果。

如果函数定义包括返回类型,则 return 语句后面必须跟有一个表达式。如果未指定返回类型,并且是单独使用 return 语句,那么它将返回 undefined

不能返回多个值。如果尝试此操作,只能返回最后一个值。在以下示例中,将返回 c

return a, b, c ;

如果需要返回多个值,可以改用数组或对象。

参数

  expression:* — 要进行计算并作为函数值返回的表达式。此参数是可选的。

结果

  * — 计算后的 expression 参数(如果提供)。

示例

以下示例在 sum() 函数体内部使用 return 语句返回三个参数的累加值。下一行代码调用 sum(),并将返回值赋给变量 newValue

function sum(a:Number, b:Number, c:Number):Number { 
return (a + b + c);
}
var newValue:Number = sum(4, 32, 78);
trace(newValue); // 114
super    

用法

 
super([arg1, ..., argN])
super.method([arg1, ..., argN])

调用方法或构造函数的超类版本或父版本。在类构造函数体中使用 super() 语句时,该语句可调用构造函数的超类版本。调用超类构造函数必须拥有正确的参数数量。请注意,超类构造函数始终会被调用,与是否显式调用无关。如果没有显 式调用它,则会在子类构造函数体中的第一条语句前自动插入不包含参数的调用。这意味着,如果您在子类中定义了一个构造函数,并且超类构造函数使用了一个或 多个参数,就必须使用正确数量的参数显式调用此超类构造函数,否则将出现错误。然而,与 ActionScript 2.0 不同,对超类构造函数的调用不需要是子类构造函数中的第一条语句。

在实例方法体中使用 super 时,它可以与点 (.) 运算符结合用于调用某种方法的超类版本,还可以选择将参数 (arg1 ... argN) 传递给超类方法。如果要创建的子类方法不仅可以向超类方法添加其他行为,还可以调用超类方法执行其原始行为,这将非常有用。

不能在静态方法中使用 super 语句。

参数

  method:Function — 要在超类中调用的方法。
  argN:* — 可选参数,用于传递给方法的超类版本或超类的构造函数。

switch    

用法

 
switch (expression) {
caseClause:
[defaultClause:]
}

将控制权传递给多条语句之一,具体取决于表达式的值。所有 switch 语句都应该包括一个默认的 case,如果不存在与表达式匹配的 case 语句,则执行此默认 case。每条 case 语句都应以 break 语句结束,这可以防止出现“失败”错误。当某个 case 失败时,则执行下一条 case 语句中的代码,即使该代码与测试表达式不匹配也不例外。

参数

  expression:* — 任何表达式。

示例

以下示例定义一个落空到默认 case 的 switch 语句:

var switchExpression:int = 3;

switch (switchExpression) {
case 0:
trace(0);
break;
case 1:
trace(1);
break;
case 2:
trace(2);
break;
default:
trace("Not 0, 1, or 2");
}
throw    

用法

 
throw expression

生成或抛出一个可由 catch 代码块处理或捕获的错误。如果异常未被 catch 块捕获,则抛出的值的字符串表示形式将被发送到“Output”面板。如果异常未被 catchfinally 块捕获,则抛出的值的字符串表示形式将被发送到日志文件。

通常,您会抛出 Error 类或其子类的实例(请参见“示例”部分)。

参数

  expression:* — 一个 ActionScript 表达式或对象。

示例

在此示例中,名为 checkEmail() 的函数将检查传送给它的字符串是否为格式正确的电子邮件地址。如果该字符串中不包含 @ 符号,此函数就会抛出一个错误。

function checkEmail(email:String) { 
if (email.indexOf("@") == -1) {
throw new Error("Invalid email address");
}
}
checkEmail("someuser_theirdomain.com");
try..catch..finally    

用法

 
try { 
// try block
} finally {
// finally block
}

try {
// try block
} catch(error[:ErrorType1]) {
// catch block
} [catch(error[:ErrorTypeN]) {
// catch block
}] [finally {
// finally block
}]

包含一个代码块,如果该代码块内发生错误,则对错误进行响应。 使用 try..catch..finally 语句实现异常处理是 ActionScript 3.0 中处理运行时错误条件的主要机制。发生运行时错误时,Flash Player 会抛出一个异常,这意味着 Flash Player 将暂停正常执行并创建一个 Error 类型的特殊对象。然后,Flash Player 将错误对象传递或抛出给第一个可用的 catch 块。如果没有可用的 catch 块,异常将被视为未捕获的异常。未捕获的异常会导致脚本终止。

您可以使用 throw 语句显式抛出代码中的异常。您可以抛出任何值,但最好抛出一个对象,因为对象比较灵活并可与 Flash Player 的行为相匹配。

若要捕获异常,而不考虑它是由 Flash Player 还是您自己的代码抛出的,则可将可能抛出异常的代码放在 try 块中。如果 try 块中的任何代码抛出了异常,控制就将传递到 catch 块(如果存在),然后传递到 finally 块(如果存在)。无论是否抛出异常,始终执行 finally 块。如果 try 块中的代码未抛出异常(也就是说,try 块正常完成),则会忽略 catch 块中的代码,但仍然执行 finally 块中的代码。即使 try 块使用 return 语句退出,finally 块仍会执行。

try 块后面必须跟一个 catch 块或 finally 块,或者两者都包括。一个 try 块可有多个 catch 块,但只能有一个 finally 块。您可以根据需要嵌套多层 try 块。

catch 处理函数中指定的 error 参数必须是简单的标识符,如 etheExceptionx。您还可以设置参数的类型。当与多个 catch 块一起使用时,您可以使用已设置类型的参数捕获从单个 try 块中抛出的多种类型的错误对象。

如果抛出的异常是一个对象,则当抛出的对象是指定的类型的子类时,类型将匹配。如果抛出的错误是特定类型,则执行处理相应错误的 catch 块。如果抛出的异常不是指定的类型,则不执行 catch 块,并自动将该异常从 try 块中抛出到与其匹配的 catch 处理函数。

如果某个函数中抛出了错误,并且此函数中不包含 catch 处理函数,则 Flash Player 将退出该函数以及任何调用方函数,直到找到 catch 块。在此过程中,在各层上都要调用 finally 处理函数。

参数

  error:* — 从 throw 语句中抛出的表达式通常是 Error 类或其某个子类的实例。

示例

以下示例演示了 try..catch 语句。try 块中的代码包括一项非法操作。Sprite 无法将其自身添加为子项。因此,Flash Player 抛出一个异常,并将一个 ArgumentError 类型的对象传递到相应的 catch 块。

import flash.display.Sprite;

var spr:Sprite = new Sprite();
try {
spr.addChild(spr);
}
catch (e:ArgumentError) {
trace (e);
}
while    

用法

 
while (condition) { 
// statement(s)
}

计算一个条件。如果该条件的计算结果为 true,则在循环再次计算该条件之前执行一个或多个语句。如果该条件的计算结果为 false,则跳过这些语句并结束循环。

while 语句执行下列步骤。步骤 1 至步骤 4 的每次重复都称为循环的一次迭代。在每次迭代开始时都会测试条件,步骤如下所示:

  1. 计算表达式 condition
  2. 如果 condition 的计算结果为 true,或者是可以转换为布尔值 true 的某个值(如非零数字),请转至步骤 3。否则,while 语句结束,并且继续执行 while 循环之后的下一条语句。
  3. 运行语句块 statement(s)。如果遇到 continue 语句,则跳过其余语句并转至步骤 1。如果遇到 break 语句,则 while 语句结束,并且继续执行 while 循环之后的下一个语句。
  4. 返回到步骤 1。

循环通常用于在计数器变量小于指定值时执行一个动作。在每个循环的结尾,计数器的值都会递增一次,直到达到指定值为止。届时,condition 不再是 true,并且循环结束。

如果要执行的语句只有一条,则用来括起要由 while 语句执行的语句的大括号 ({}) 是不必要的。

参数

  condition:Boolean — 一个计算结果为 truefalse 的表达式。

示例

在以下示例中,while 语句用于测试表达式。当 i 的值小于 20 时,跟踪 i 的值。当条件不再为 true 时,将退出循环。
var i:Number = 0;
while (i < 20) { trace(i); i += 3; }

with    

用法

 
with (object:Object) { 
// statement(s)
}

建立一个默认对象,供执行一条或多条语句时使用,这可能会减少需要写入的代码量。

object 参数将成为上下文,可在其中读取 statement(s) 参数中的属性、变量和函数。例如,如果 objectmy_array,并且指定的属性中包含 lengthconcat,将自动以 my_array.lengthmy_array.concat 的形式读取这些属性。再比如,如果 objectstate.california,则 with 语句中的任何动作或语句都要从 california 实例内部调用。

若要查找 statement(s) 参数中某个标识符的值,ActionScript 会从由 object 指定的作用域链的起始部分开始查找,并按特定的顺序在该作用域链的每一层搜索此标识符。

with 语句用于解析标识符的作用域链从以下列表中的第一项开始,到最后一项结束:

  • 最内层 with 语句中的 object 参数指定的对象
  • 最外层 with 语句中的 object 参数指定的对象
  • Activation 对象(当脚本调用的函数包含该函数中调用的局部变量时自动创建的临时对象)
  • 包含当前执行的脚本的对象
  • Global 对象(诸如 Math 和 String 等内置对象)

若要在 with 语句内部设置变量,必须首先在 with 语句外部声明该变量,或者必须输入该变量所处时间轴的完整路径。如果在 with 语句中设置了未经声明的变量,则 with 语句将根据作用域链查找该值。如果该变量尚不存在,则将在调用 with 语句的时间轴上设置此新值。

参数

  object:Object — ActionScript 对象或影片剪辑的实例。

示例

以下示例首先设置 someOther_mc 实例的 _x_y 属性,然后指示 someOther_mc 转到第 3 帧并停止。

with (someOther_mc) { 
_x = 50;
_y = 100;
gotoAndStop(3);
}

抱歉!评论已关闭.