@Aaron, good tip, will see if I can use that also. @Eneko, that is my understanding also, although knowing JS I am not sure how it will behave further down the road when they overwrite the same value, they might split into two different objects with overlaps and complement each other.. (my JS experience with this is limited.. please someone correct me if I am wrong..) Also, I dont want to overload the initialization class, this looks messy and hard to understand what are the instance variables are..
Might I suggest this "feature" be documented somehow? :) I will open a light house ticket to see if I can pass this .. On Sun, Jan 31, 2010 at 10:54 PM, Eneko Alonso <[email protected]>wrote: > From my understanding, without getting in depth of how Mootools works, here > is what happens: > > When the js parser executes the line "MyClass = new Class.." it creates the > native object that is passed to the Class function. In order to create this > native object, it has to create an instance of a Hash, which gets assigned > to the myHash property. > > So far, we have a hash object created in memory and the result object > returned by Class. This resulting object has a pointer to the Hash object in > memory: the myHash property. > > When you create new instances of this object, you are just cloning that > pointer, which keeps pointing to the same Hash object in memory. Again, > these two lines do not create a new instance of a Hash, but just clone the > pointer to the original instance. > > a = new MyClass(); > b = new MyClass(); > > If I'm not mistaken, this would happen with any object instanced in the > declaration of a class. > > In the other hand, when you put something in the initialize method (class > constructor), it does not get executed until the class (MyClass) is > instantiated. > > That's why, in general, class properties should be only static values and > everything that requires instantiating new objects should be done in the > constructor. > > Please, let me know if I'm wrong. > > > > > On Sun, Jan 31, 2010 at 12:15 PM, Roman Land <[email protected]> wrote: > >> Hi, >> >> I found out (the "bug" way ;) ) that if I write a class like so: >> >> MyClass = new Class({ >> >> myHash : new Hash() >> >> }) >> >> Later I will use this class >> >> a = new MyClass(); >> >> b = new MyClass(); >> >> I would seem that the hash is actually being shared :P >> My work around is to init the hash in the "initialize" method. >> >> Any thought about this? I dont like the aesthetics of this >> implementation... >> >> Cheers >> Roman >> >> -- >> --- >> "Make everything as simple as possible, but not simpler." >> >> - Albert Einstein >> >> > -- --- "Make everything as simple as possible, but not simpler." - Albert Einstein
