AS3:装载机都在一条线上?
AS3: Loader all on one line?
我习惯看到 Loader class 是这样使用的:
var loader:Loader = new Loader();
loader.loadBytes(myByteArray);
addChild(loader);
但后来我遇到了一些代码,所有代码都在一行中完成:
Loader(addChild(new Loader())).loadBytes(myByteArray);
两者有什么区别?一种方法比另一种更好吗?谁能解释一下第二个版本到底发生了什么?
几乎没有任何区别,第一个版本是 "better" 因为它实际上是可读的。
分解:
Loader(addChild(new Loader())).loadBytes(myByteArray);
我们将某些东西转换为 Loader
类型的对象:Loader(...)
然后我们使用 addChild
将 DisplayObject 添加到当前显示列表,这将 return 我们添加的 DisplayObject(这样我们实际上就有了可以转换为其他内容的内容)。
有问题的 DisplayObject 是一个 Loader
对象,我们为此创建了一个新对象。
因此,Loader(addChild(new Loader()))
创建一个新的 Loader 对象并将其添加到显示列表中。但这仍然有点无用,因为 Loader 需要加载一些东西,对吧?这就是为什么我们首先将整个 DisplayObject 转换为 Loader
的原因,以便我们可以使用它的方法,例如 loadBytes(bytearray)
。如果您不将整个内容放入 Loader(...)
转换中,您将无法访问这些方法,因为 addChild 只会 return DisplayObject 类型的对象,而不是 Loader。
综上所述,这对性能没有任何影响,它只是为了相同的目标而缩短了写作风格。如果您是唯一一个会在您的项目中看到此代码的人,那很好。如果没有,请考虑其他人也应该能够阅读代码,而不必一步一步地分解代码。
我习惯看到 Loader class 是这样使用的:
var loader:Loader = new Loader();
loader.loadBytes(myByteArray);
addChild(loader);
但后来我遇到了一些代码,所有代码都在一行中完成:
Loader(addChild(new Loader())).loadBytes(myByteArray);
两者有什么区别?一种方法比另一种更好吗?谁能解释一下第二个版本到底发生了什么?
几乎没有任何区别,第一个版本是 "better" 因为它实际上是可读的。
分解:
Loader(addChild(new Loader())).loadBytes(myByteArray);
我们将某些东西转换为 Loader
类型的对象:Loader(...)
然后我们使用 addChild
将 DisplayObject 添加到当前显示列表,这将 return 我们添加的 DisplayObject(这样我们实际上就有了可以转换为其他内容的内容)。
有问题的 DisplayObject 是一个 Loader
对象,我们为此创建了一个新对象。
因此,Loader(addChild(new Loader()))
创建一个新的 Loader 对象并将其添加到显示列表中。但这仍然有点无用,因为 Loader 需要加载一些东西,对吧?这就是为什么我们首先将整个 DisplayObject 转换为 Loader
的原因,以便我们可以使用它的方法,例如 loadBytes(bytearray)
。如果您不将整个内容放入 Loader(...)
转换中,您将无法访问这些方法,因为 addChild 只会 return DisplayObject 类型的对象,而不是 Loader。
综上所述,这对性能没有任何影响,它只是为了相同的目标而缩短了写作风格。如果您是唯一一个会在您的项目中看到此代码的人,那很好。如果没有,请考虑其他人也应该能够阅读代码,而不必一步一步地分解代码。