Andy Moore
Andy Moore

Reputation: 865

Flash duplication of an Object - Cloning library?

This is probably a very simple question, I just don't have the foggiest how to go about it.

I have an Object that I want to duplicate, and don't know how to go about it. Here's my attempt:

var myObj = new ObjectClass();
var duplicate = myObj;
duplicate = null;
myObj.function(); // Error: Null reference

The ObjectClass is very large, inherets and creates children of it's own, and I'm sure there's probably a few singleton classes in there.

Is there a way to duplicate something easily?

Edit: Looks like I'm looking for "Cloning", for which there is no AS3 function, and you apparantly can't clone Private data anyway. Anyone know of a library or a workaround for cloneing a bunch of private data?

Upvotes: 4

Views: 4637

Answers (2)

James Ward
James Ward

Reputation: 29433

You can use ObjectUtil.copy() (a Flex library). But you are right that it doesn't support private data. So this is a shot in the dark but I wonder if you serialize it to AMF using ByteArray.writeObject() if that will copy the private data? Might be worth trying.

Upvotes: 1

Gerald Yeo
Gerald Yeo

Reputation: 68

I got this util function from some blog, can't remember from where so I can't give the credit. It wouldn't work with bitmapdata though. Anyway here it is:

public static function copy(o:Object):Object 
{
    var bytes:ByteArray = new ByteArray( );
    bytes.writeObject( o );
    bytes.position = 0;
    return bytes.readObject( );
}

Usage:
registerClassAlias("com.tests.TestClass", TestClass); var testCopy:TestClass = TestClass(ObjectUtil.copy(test));

Upvotes: 4

Related Questions