AS3:加载器全部在一行上



我习惯于看到 Loader 类是这样使用的:

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

但后来我遇到了一些代码,其中所有代码都在一行上完成:

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

两者有什么区别?一种方式比另一种方式好吗?有人可以解释一下第二个版本中到底发生了什么吗?

几乎没有

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

分解一下:

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

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

然后我们使用 addChild 将一个 DisplayObject 添加到当前显示列表中,这将返回我们添加的 DisplayObject(这样我们实际上就有了一些可以投射到其他东西的东西)。

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

因此,Loader(addChild(new Loader()))创建一个新的加载器对象并将其添加到显示列表中。但这仍然有点没用,因为加载器需要加载一些东西,对吧?这就是为什么我们首先将整个DisplayObject转换为Loader的原因,以便我们可以使用其方法,例如 loadBytes(bytearray) 。如果您不将整个内容放入Loader(...)强制转换中,您将无法访问这些方法,因为 addChild 将只返回 DisplayObject 类型的对象,而不是 Loader。

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

最新更新