AS3:装载机全部在一条线上?

时间:2015-01-07 01:39:23

标签: actionscript-3 loader

我以前看过像这样使用的Loader类:

var loader:Loader = new Loader();
loader.loadBytes(myByteArray);
addChild(loader);

然后我遇到了一些代码,它们都在一行上完成:

Loader(addChild(new Loader())).loadBytes(myByteArray);

两者之间的区别是什么?有一种方式比另一种更好吗?有人可以解释第二个版本究竟发生了什么吗?

1 个答案:

答案 0 :(得分:3)

几乎没有任何区别,第一个版本是"更好"因为它实际上是可读的。

要打破它:

Loader(addChild(new Loader())).loadBytes(myByteArray);

我们将某些内容转换为Loader类型的对象:Loader(...)

然后我们使用addChild将DisplayObject添加到当前的displaylist,它将返回我们添加的DisplayObject(这样我们实际上可以将某些内容转换为其他东西)。

有问题的DisplayObject是一个Loader对象,我们为此创建一个新对象。

因此,Loader(addChild(new Loader()))创建一个新的Loader对象并将其添加到displaylist。但这仍然没用,因为Loader需要加载一些东西,对吧?这就是我们首先将整个DisplayObject转换为Loader的原因,以便我们可以使用其方法,例如loadBytes(bytearray)。如果你不能把整个事情放到Loader(...)演员表中,你将无法访问这些方法,因为addChild只返回DisplayObject类型的对象,而不是Loader。

总而言之,这对性能没有任何影响,它只是针对同一目标的较短写作风格。如果您是唯一一个会在您的项目中看到此代码的人,那就没问题了。如果没有,请考虑其他人也应该能够阅读代码,而不必逐步分解。