fyi, Hash is defined in Core.js; Hash.js just adds a bunch of extra goodies.
2010/1/13 Fábio M. Costa <[email protected]> > Thank you for the advice Aaron. > So: > > var clonedHash = new Hash(toBeClonedHash); > > And that's whats done internally: > > function(object){ > if ($type(object) == 'hash') object = $unlink(object.getClean()); > for (var key in object) this[key] = object[key]; > return this; > } > > This is the standard way of cloning a hash. > > getClean() will transform a Hash object into a normal javascript Object. > Then it goes to the $unlink function that will recursively copy all the > primitive types to 'this', which is a Hash object. > > Hope its clear now. > > > -- > Fábio Miranda Costa > Solucione Sistemas > Engenheiro de interfaces > > > On Wed, Jan 13, 2010 at 3:22 PM, אריה גלזר <[email protected]> wrote: > >> ok. so i started digging in the core's code to understand better how to do >> this best. I noted the $unlink, when passed a hash, simply does >> return new Hash(object) >> this seemed odd, because i couldn't understand how it solves the recrusive >> issue, so i figured i'll find the answer at the Hash constructor, so i went >> to the Hash code base. which apparently, has no constructor (at least not >> here<http://github.com/mootools/mootools-core/blob/master/Source/Native/Hash.js>). >> so i decided to find getClean to see if it solves the recursive issue. >> but again - no getClean method >> there<http://github.com/mootools/mootools-core/blob/master/Source/Native/Hash.js>. >> >> so i was thinking this probably means Hash gets its methods and >> constructor from other natives, but couldn't find which. >> >> so a few questions - >> 1. where exactly does Hash gets its constructor from and what kind of >> checks does it do (if any) to make sure it really does create a truly new >> object (and if none is the answer, the $unlink code is broken). >> 2. where does getClean comes from? is it recursive? >> 3. will $unlink really do the trick for me (assuming it will actually >> work)? or do i need to do $unlink(hash.getClean()) for it to function >> properly? >> >> cloning an object or an array seems like a trivial operation to me. It >> seems odd that this is both so complex and also that moo doesn't have a >> fully supported way of doing this (or at least a coding standard for it). >> * >> (btw - this isn't criticism - if that's what it sounds like - i really dig >> moo and you developers really take programing with JS to a completely new >> level. I'm just curious about it). * >> ----------- >> אריה גלזר >> 052-5348-561 >> 5561 >> >> >> On Wed, Jan 13, 2010 at 18:25, Aaron Newton <[email protected]> wrote: >> >>> $unlink isn't documented; the risk being that it may not be supported in >>> the future. >>> >>> 2010/1/13 Fábio M. Costa <[email protected]> >>> >>> var newHash = $unlink(oldHash); >>>> >>>> >>>> -- >>>> Fábio Miranda Costa >>>> Solucione Sistemas >>>> Engenheiro de interfaces >>>> >>>> >>>> >>>> On Tue, Jan 12, 2010 at 11:25 PM, Eneko Alonso >>>> <[email protected]>wrote: >>>> >>>>> It's simple... just create a new Hash. >>>>> >>>>> var clon = new Hash(clonedHash.getClean()); >>>>> >>>>> >>>>> That should work >>>>> >>>>> >>>>> >>>>> On Sat, Jan 9, 2010 at 11:54 AM, אריה גלזר <[email protected]>wrote: >>>>> >>>>>> reading more i saw that this supplies me with a non-hash copy, but i >>>>>> do need a hash... >>>>>> >>>>>> ----------- >>>>>> אריה גלזר >>>>>> 052-5348-561 >>>>>> 5561 >>>>>> >>>>>> >>>>>> On Sat, Jan 9, 2010 at 21:51, אריה גלזר <[email protected]>wrote: >>>>>> >>>>>>> im looking to clone the hash, not create an empty one... >>>>>>> >>>>>>> ----------- >>>>>>> אריה גלזר >>>>>>> 052-5348-561 >>>>>>> 5561 >>>>>>> >>>>>>> >>>>>>> On Sat, Jan 9, 2010 at 21:27, Piotr Zalewa <[email protected]> wrote: >>>>>>> >>>>>>>> a = this.hash.getClean() >>>>>>>> will give you a standard object from a Hash >>>>>>>> >>>>>>>> 2010/1/9 אריה גלזר <[email protected]> >>>>>>>> >>>>>>>> hey. this is a very simple question that i'm dealing with - >>>>>>>>> i have a class with a hash member. i want to send a copy of that >>>>>>>>> hash to another function without modifying the original. >>>>>>>>> doing: >>>>>>>>> >>>>>>>>> var a = this.hash >>>>>>>>> >>>>>>>>> will only create a reference. is there a simple way of copying >>>>>>>>> objects or should i just iterate over it to create a new one? >>>>>>>>> ----------- >>>>>>>>> אריה גלזר >>>>>>>>> 052-5348-561 >>>>>>>>> 5561 >>>>>>>>> Nothing selected >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> London, UK >>>>>>>> >>>>>>> >>>>>>> Nothing selected >>>>>>> >>>>>> >>>>>> Nothing selected >>>>>> >>>>> >>>>> >>>> >>> >> >
