0

有人对as运算符有很好的解释吗?

一方面,在我看来,使用as而不是实例化一个新对象通常更好。

但是在某些情况下,当这个操作员让我失望时。例如,当通过URLLoader加载 XML 格式的文本文件时:

private function completeHandler(event:Event):void {
    var loader:URLLoader = URLLoader(event.target);
    trace("completeHandler: " + loader.data);

    var x:XML = new XML(loader.data);
    trace("x=" + x);
}

为什么我必须在这里使用构造函数?为什么我不能说var x:XML = loader.data as XML; 并节省一些内存?

感谢您的任何见解!亚历克斯

4

1 回答 1

4

as评估变量的类型是超类还是另一个类的子类。它不会创建新对象。不同之处is在于,虽然is返回布尔值,但as返回所需类型的对象或null. 它用于类型转换。

请参阅ActionScript 文档

一个典型的用例是在舞台上使用 MovieClip,它通过实例名称检索:

// This will not compile:
var d:DisplayObject = stage.getChildByName ("instance1"); 
d.gotoAndPlay (2);

// This will play the MovieClip from frame 2
var m : MovieClip = stage.getChildByName ("instance1") as MovieClip;
m.gotoAndPlay (2); 

stage.getChildByName()总是返回一个 DisplayObject,不管它是否真的是一个 MovieClip、Sprite、Button 等。所以如果你想使用任何类 MovieClip 的方法,你需要先将类型转换为 MovieClip。但是,这不会创建新的 MovieClip,而只是确保您使用的是正确的类型。

于 2011-02-21T11:17:51.103 回答