关于转换对象

转换的语法为 type(item),表示您希望编译器将 item 视作数据类型为 type 的项目。转换实质上是一个函数调用,如果转换在运行时失败,该函数调用将返回 null(仅在为 Flash Player 7 或更高版本发布的文件中会出现这种情况;为 Flash Player 6 发布的文件不为失败的转换提供运行时支持)。如果转换成功,该函数调用将返回原对象。不过,编译器无法确定转换在运行时是否会失败,也不会在失败时生成编译时错误。

下面的代码显示了一个示例:

// Both the Cat and Dog classes are subclasses of the Animal class
function bark(myAnimal:Animal) {
    var foo:Dog = Dog(myAnimal);
    foo.bark();
}
var curAnimal:Animal = new Dog();
bark(curAnimal); // 起作用
curAnimal = new Cat();
bark(curAnimal); // 不起作用

在此示例中,您向编译器声明了 foo 是一个 Dog 对象,因此,编译器认为 foo.bark(); 是一个合法语句。但是,编译器不知道该转换将失败(即,您尝试将一个 Cat 对象转换为 Animal 类型),因此不会发生任何编译时错误。不过,如果在脚本中加入一条检查语句,检查转换是否成功,在运行时便能够发现转换错误,如下面的示例中所示。

function bark(myAnimal:Animal) {
  var foo:Dog = Dog(myAnimal);
  if (foo) {
    foo.bark();
  }
}

您可以将表达式的类型转换为接口。如果该表达式是一个实现该接口的对象,或具有实现该接口的基类,则转换将成功。如果不是,转换将失败。

注意

 

转换为 null 或未定义会返回 undefined

不能使用转换运算符覆盖具有相应全局转换函数的同名原始数据类型。这是因为全局转换函数的优先级高于转换运算符。例如,您无法转换成 Array,因为 Array() 转换函数的优先级高于转换运算符。

此示例定义了两个字符串变量(firstNum secondNum),并将它们加在了一起。初始结果是数字被连接在一起,而不是加在一起,因为它们是 String 数据类型。第二个 trace 语句在执行加法之前将两个数字转换为 Number 数据类型,从而得到正确的结果。在使用通过 XML 或 FlashVars 加载的数据时数据转换是非常重要的,如下面的示例中所示:

var firstNum:String = "17";
var secondNum:String = "29";
trace(firstNum + secondNum); // 1729
trace(Number(firstNum) + Number(secondNum)); // 46

有关数据转换函数的更多信息,请参见《ActionScript 2.0 语言参考》中每个转换函数的条目:Array 函数Boolean 函数Number 函数Object 函数String 函数


 

评论添加到页面后给我发送电子邮件 | 评论报告

当前页: http://livedocs.adobe.com/flash/8_cn/main/00001211.html