Thanks for your suggestions and recommendations... On Oct 10, 6:08 am, "T.J. Crowder" <t...@crowdersoftware.com> wrote: > Hi, > > Your problem is in your Test class. You're creating an `options` > object on the prototype of your class, which means that it will be > *shared* by all instances of your class. Since your constructor is > writing to properties on that shared object, naturally multiple calls > to the constructor overwrite each others' values: > > var t1 = new Test(0, {first: 'Fred', last: 'Flintstone'}); > var t2 = new Test(1, {first: 'Barney', last: 'Rubble'}); > alert(t1.options.first); // Alerts "Barney", not "Fred" > > A lot of times, you *do* want to put defaults for properties on the > prototype and the override them (if necessary) on the instance itself > (it's more memory-efficient to share default values; the instance will > get its own copy if you assign a value to it on the instance), but > you're not doing that -- you're writing to properties of the property > (`this.options.first`), not the property itself (`this.options`). > > The fix in your case is simple: Remove the `options` property from > your `Class.create` call and instead put it in the constructor > function: > > Test = Class.create({ > initialize:function(count,obj){ > this.options = {}; > this.options.id = count; > this.options.first = obj.first; > this.options.last = obj.last; > } > > }); > > That was the minimalist change; you can make it a bit more brief: > > Test = Class.create({ > initialize:function(count,obj){ > this.options = { > id: count, > first: obj.first, > last: obj.last > }; > } > > }); > > Barring other issues (I haven't read through the other code in detail, > this jumped right out at me), that should sort it out. > > Off-topic: It looks odd that you don't have `var` in front of your > various class names, e.g. `var Test = Class.create` rather than `Test > = Class.create`. Have you already declared the vars somewhere else? > It's just, if you haven't, you're relying on the horror that is > JavaScript's implicit globals[1], which I would STRONGLY recommend > against doing. > > [1]http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html > > HTH, > -- > T.J. Crowder > Independent Software Engineer > tj / crowder software / com > www / crowder software / com > > On Oct 10, 4:25 am, Steven Albarracin <stevenalbarra...@gmail.com> > wrote: > > > /* > > Basically I'm trying the pass an array of objects and pass them into > > the Test class, but it only seems to be passing in the last object in > > the array... > > */ > > > // class to store the id, first, last name > > Test = Class.create({ > > options:{}, > > initialize:function(count,obj){ > > this.options.id = count; > > this.options.first = obj.first; > > this.options.last = obj.last; > > } > > > }); > > > // the array of the first and last name items > > people = [{first:"Santa",last:"Claus"}, > > {first:"John",last:"Doe"}, > > {first:"Jane",last:"Johnson"}]; > > > // displaying the items to FF console, > > // open your console and click on the object and hit options to see > > the parameters > > Start ={ > > init:function(people){ > > people.each(function(obj,count){ > > //this shows looping through the array correctly > > Start.log(obj); > > //in theory this should be showing the class with > > each array item > > instead it s storing the last item > > Start.log(new Test(count,obj)); > > }); > > }, > > log:function(message){ > > if(window.console && console.log) console.log(message); > > } > > > }; > > > Start.init(people); > > > /* > > console will show something like this > > > Object { first="steven", more...} > > Object { options=Object} <------ click these, notice they dont match > > the object above instead show last item > > Object { first="John", more...} > > Object { options=Object} <------ click these, notice they dont match > > the object above instead show last item > > Object { first="Jane", more...} > > Object { options=Object} <------ click these, notice they dont match > > the object above instead show last item > > > Can someone tell me whats wrong here, thanks > > */
-- You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to prototype-scriptacul...@googlegroups.com. To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en.