Thanks for the support. The solution works great. But i would like to
know meaning of statement new source.__constructor__(); Also if you
guys can give some links to documents which provide information about
the inner details of Flex or Actionscript, like keywords and logic
used in given solution.

Thanks for the help.

Pradeep


On 6/22/05, James Ward <[EMAIL PROTECTED]> wrote:
>  Joe,
>  Your timing on this was impeccable!  I just spent the past hour
>  wrestling with ObjectCopy (both Manish's and the mx.utils one that
>  doesn't work).
>  
>  So here is Manish's ObjectCopy with Joe's hack to preserve type:
>  
>    public static function copy(source):Object
>    {
>      var cl:Number = copyCache.length;
>      for (var i:Number = 0; i < cl; i++)
>      {
>        var o = copyCache[i];
>        if (o.s == source)
>          return o.t;
>      }
>  
>      copyDepthLevel++;
>  
>      var newObj;
>  
>      if (typeof(source.__constructor__) == "function")
>      {
>        // for AS2 classes
>        newObj = new source.__constructor__();
>      }
>      else if (typeof(source.constructor) == "function")
>      {
>        // for Arrays and Objects
>        newObj = new source.constructor();
>      }
>      else
>      {
>        // for goodness sake, instantiate *something*!
>        newObj = new Object();
>      }
>  
>      copyCache.push({s: source, t: newObj});
>  
>      for (var p in source)
>      {
>        var v = source[p];
>        newObj[p] = typeof v == "object" ? copy(v) : v;
>      }
>  
>      if (--copyDepthLevel == 0)
>        copyCache = [];
>  
>      return newObj;
>    }
>  
>  
>  Notice that the method signature changed slightly.  This was to avoid
>  this error:
>  Error: A function call on a non-function was attempted.
>  
>  due to: 
>  newObj = new source.constructor();
>  
>  
>  I have tested this code in my app and it's working great!  Thanks Joe
>  and Manish!
>  
>  -James
> 
>  
>  
>  On Wed, 2005-06-22 at 11:18 -0400, Joe Berkovitz wrote:
>  > A couple of big caveats here.
>  > 
>  > 1. mx.utils.ObjectCopy is broken.  (At least, in the Flex 1.5 
>  > distribution.)  It does not correctly preserve the class of an object 
>  > when that class is a subclass of some superclass.  Instead, the copied 
>  > object will appear to have the type of the superclass.
>  > 
>  > I note that ObjectCopy appears to only be used in net debugging and 
>  > nowhere else.  So this bug isn't exposed via any documented Flex APIs.
>  > 
>  > Moral: beware of undocumented internal Flash classes, however convenient 
>  > they might look.
>  > 
>  > 2. Even if ObjectCopy worked, you cannot conveniently meld Manish's 
>  > cached-array approach with it, because ObjectCopy will do the wrong 
>  > thing with cycles (it locks up) and multiply referenced objects (it 
>  > duplicates instances).
>  > 
>  > So.... what to do?
>  > 
>  > As empirically determined through testing, one correct approach in Flex 
>  > 1.5 to instantiating an object that preserves the type of an existing 
>  > one is as follows:
>  > 
>  >          var newObj;
>  >          if (typeof(obj.__constructor__) == "function")
>  >          {
>  >              // for AS2 classes
>  >              newObj = new obj.__constructor__();
>  >          }
>  >          else if (typeof(obj.constructor) == "function")
>  >          {
>  >              // for Arrays and Objects
>  >              newObj = new obj.constructor();
>  >          }
>  >          else
>  >          {
>  >              // for goodness sake, instantiate *something*!
>  >              newObj = new Object();
>  >          }
>  > 
>  > I've exhaustively tested this and it works correctly for AS2 classes, 
>  > for Arrays, and for untyped Objects.  You can merge it with Manish's 
>  > code (which I haven't tested, but looks good) to produce a working, 
>  > accurate deep copy.
>  > 
>  > .. .  .    .       .            j
>  > 
>  > 
>  > Abdul Qabiz wrote:
>  > >
> http://manish.revise.org/2005/04/deepcopying-actionscript-objects.html
>  > > 
>  > > http://www.darronschall.com/weblog/archives/000148.cfm
>  > > 
>  > > 
>  > > -abdul
>  > > 
>  > > 
>  > > -----Original Message-----
>  > > From: [email protected] [mailto:[EMAIL PROTECTED] On
>  > > Behalf Of Pradeep Chaudhary
>  > > Sent: Wednesday, June 22, 2005 7:33 PM
>  > > To: [email protected]
>  > > Subject: [flexcoders] How to create copy of a object
>  > > 
>  > > I want to create a copy for my custom object before it is modified so
>  > > that i can rollback my changes on any error condition. Do we have any
>  > > inbuilt methods or any alternative solution for creating a copy of
>  > > object so that changes made to original object is not reflected copied
>  > > object.
>  > > 
>  > > Pradeep
>  > > 
>  > > 
>  > >  
>  > > Yahoo! Groups Links
>  > > 
>  > > 
>  > > 
>  > >  
>  > > 
>  > > 
>  > > 
>  > > 
>  > >  
>  > > Yahoo! Groups Links
>  > > 
>  > > 
>  > > 
>  > >  
>  > > 
>  > > 
>  > > 
>  > > 
>  > > 
>  > 
>  > 
>  >  
>  > Yahoo! Groups Links
>  > 
>  > 
>  > 
>  >  
>  > 
>  > 
>  > 
>  
>  
>  
>  
>  ________________________________
>  Yahoo! Groups Links
>  
>  
> To visit your group on the web, go to:
> http://groups.yahoo.com/group/flexcoders/
>   
> To unsubscribe from this group, send an email to:
> [EMAIL PROTECTED]
>   
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.


--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 


Reply via email to