errr not initialization class - initialization method ..

On Sun, Jan 31, 2010 at 11:04 PM, Roman Land <[email protected]> wrote:

> @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
>
>


-- 
---
"Make everything as simple as possible, but not simpler."

- Albert Einstein

Reply via email to