我以前看过像这样使用的Loader类:
var loader:Loader = new Loader();
loader.loadBytes(myByteArray);
addChild(loader);
然后我遇到了一些代码,它们都在一行上完成:
Loader(addChild(new Loader())).loadBytes(myByteArray);
两者之间的区别是什么?有一种方式比另一种更好吗?有人可以解释第二个版本究竟发生了什么吗?
答案 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。
总而言之,这对性能没有任何影响,它只是针对同一目标的较短写作风格。如果您是唯一一个会在您的项目中看到此代码的人,那就没问题了。如果没有,请考虑其他人也应该能够阅读代码,而不必逐步分解。