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