Here's why this is happening:

http://groups.google.com/group/mootools-users/browse_thread/thread/5678930346ffe3d0/58ffd6bde074af02?lnk=gst&q=object.reset#58ffd6bde074af02

On Mon, Feb 8, 2010 at 12:09 PM, Roman Land <[email protected]> wrote:

> Thanks for the confirmation!
>
> But I am not trying to do anything with Object.reset in my code, I am
> actually after the implementation of Class, it looks like if we use:
>
> MyClass = new Class({
>
>  myHash: new Hash()
>
> })
>
> //When when go ahead and do this:
> myClass = new MyClass();
> myClass2 = new MyClass();
>
> //And we do this now:
> myClass.myHash.set('test','testing');
>
> //This will now work:
> myClass2.myHash.get('test'); // will return 'testing'
>
> IMO this is either an error in documentation or an error in the
> implementation of Class?
> This is what I am after..
>
> I have logged a lighthouse ticket and $unlink was suggested to be used in
> Object.reset, IMO this would be more logical and intuitive than whats
> happening right now
>
>
>
>
>
> On Mon, Feb 8, 2010 at 7:26 PM, Aaron Newton <[email protected]> wrote:
>
>> You basically have this correct.
>>
>> If you did this:
>>
>> var myArr = [];
>> myArr.each = function(){ alert('hi'); };
>>
>> You've just overwritten the prototype's value for .each.
>>
>> Then if you did this:
>>
>> delete myArr.each
>>
>> You will remove that value from the instance, so that a reference to
>> myArr.each will find nothing, and then inspect its prototype. By deleting
>> the value, you are now able to switch on the prototype and, if there is no
>> .each on the prototype, it will be undefined.
>>
>> So why not just do:
>>
>> $type(myArr.prototype.each)
>>
>> Because the object's prototype may not have that property, but its prototype
>> might, i.e. myArr.prototype.prototype.each. Or further up the chain of
>> inheritance - myArr.prototype.prototype.prototype.each, etc. So if you want
>> to get to the inherited value for something, you must remove it from the
>> instance and then try and reference it again.
>>
>> On Sat, Feb 6, 2010 at 4:12 PM, Romansky <[email protected]> wrote:
>>
>>> Thanks - Im trying to understand the code :) so please bare with me..
>>>
>>> So when core does this:
>>> #################
>>> function Class(params){
>>>
>>>        if (params instanceof Function) params = {initialize: params};
>>>
>>>        var newClass = function(){
>>>                Object.reset(this);
>>>                if (newClass._prototyping) return this;
>>>                this._current = $empty;
>>>                var value = (this.initialize) ?
>>> this.initialize.apply(this,
>>> arguments) : this;
>>>                delete this._current; delete this.caller;
>>>                return value;
>>>        }.extend(this);
>>>
>>>        newClass.implement(params);
>>>
>>>        newClass.constructor = Class;
>>>        newClass.prototype.constructor = newClass;
>>>
>>>        return newClass;
>>>
>>> };
>>> #################
>>>
>>>
>>> This is how I understand it works:
>>> 1. it prototypes the newClass with the parameters we put for the
>>> ( newClass.implement(params); )
>>> 2. Then when a "new" instance is created,
>>> 2.1 Object.reset removes all new copies made by step 2 (now belonging
>>> to "this"), by this it now points the instance vars to the function
>>> prototype
>>> 2.2 Object.reset creates new object elements and arrays
>>> 2.3 But all other instance var types remain pointing to the prototype
>>>
>>> Is my understanding correct and I can go to sleep at last? :)
>>>
>>>
>>> On Feb 7, 1:17 am, Sanford Whiteman <[email protected]>
>>> wrote:
>>> > > @Sandy, how does that work? can you show an example?
>>> > > External link would be great also
>>> >
>>> > Like so:http://mootools.net/shell/mB3E8/
>>> >
>>> > -- Sandy
>>>
>>
>>
>
>
> --
> ---
> "Make everything as simple as possible, but not simpler."
>
> - Albert Einstein
>
>

Reply via email to