我已经扩展ByteArray类,如下所示:麻烦克隆扩展的ByteArray
和克隆使用的ByteArray#的readObject()的这个类的实例/的writeObject()。但是,由于某些原因,克隆的对象是ByteArray的实例而不是MyByteArray。这在下面的例子说明:
registerClassAlias("MyByteArray", MyByteArray);
var b1:MyByteArray = new MyByteArray();
var tmp:ByteArray = new ByteArray();
tmp.writeObject(b1);
tmp.position = 0;
var b2:* = tmp.readObject();
trace(b2 is MyByteArray); // prints false
trace(b2 is ByteArray); // prints true
而且,当我在MyByteArray类添加一些自定义字段,它们没有保存的writeObject()既不克隆...
谁能给我解释一下为什么克隆的对象不是MyByteArray的实例?
非常感谢!
不,tmp需要是ByteArray类型。这是在AS3中克隆对象的典型方式,也是以ObjectUtil.copy()的形式实现的。由于tmp.writeObject()不保存MyByteArray的任何字段(在这个最小的例子中MyByteArray没有字段,但它在我的应用程序中),Typecasting并没有帮助。奇怪的是,如果MyByteArray不扩展ByteArray,那么一切正常,即克隆后b2的类型为MyByteArray。 – bartekb 2009-05-18 12:18:06