Yeah it sounds complicated... I'm kinda newbe to this, I hope you don't mind if I ask these silly questions
I thought the anonymous function got executed on this line for ( var i in properties ) { (function(){ this[ "get" + i ] = function() { return properties[i]; }; this[ "set" + i ] = function(val) { properties[i] = val; }; }).call(this)--> EXECUTE! (and use actual value of i) // now go on with the next i ; } Isn't this the "logical" way of seeing it? what am I missing? On Thu, Dec 18, 2008 at 3:38 PM, Balazs Endresz <balazs.endr...@gmail.com> wrote: > > this[ "set" + i ] = function(val) { > properties[i] = val; > }; > > This code only defines a function but doesn't execute its contents > right now, and as functions "capture" the variables defined outside of > them if you change the value of i then it will "change" in properties > [i] too. In other words the `i` in properties[i] is the same that you > use for the loop. > > If you use a closure you can define a local variable that gets the > value (not the reference!) of the current index so that won't change > afterwards. > > Sounds complicated but it really isn't - once you get it :) > > On Dec 18, 5:52 pm, "pablo fernandez" <fernandezpabl...@gmail.com> > wrote: >> That Does it too!! >> >> I still don't get why 'i' keeps always the last value if you don't do >> var i = j; :S >> >> On Thu, Dec 18, 2008 at 1:11 PM, Balazs Endresz >> >> >> >> <balazs.endr...@gmail.com> wrote: >> >> > I've just had a look at it and where this issue comes up in the book >> > there's a new variable declared (like on page 153). No need to pass >> > the argument this way, moreover not that easy to mistype: >> >> > for ( var j in properties ) { (function(){ >> > var i=j; >> > ... >> >> > I can't believe no one has spotted >> > this:http://www.apress.com/book/errata/275 >> >> > On Dec 18, 4:53 pm, Pablo Fernandez <fernandezpabl...@gmail.com> >> > wrote: >> >> That did it, although I had to add this too >> >> >> -- }).call(this,i); >> >> >> in order to pass the parameter >> >> >> Thanks Balazs!!! >> >> >> On 18 dic, 12:29, Balazs Endresz <balazs.endr...@gmail.com> wrote: >> >> >> > Oops, I didn't notice it: you have to pass the `i` variable too: >> >> > for ( var i in properties ) { (function(i){ >> >> >> > That's why you need the closure at all. Without that you will get the >> >> > last property from all getters. >> >> >> > The reference of `this` will always change if you put it in an >> >> > additional function, doesn't matter if it's inside an instantiated >> >> > object. Well, you can call that either design error or feature too :) >> >> >> > On Dec 18, 4:18 pm, Pablo Fernandez <fernandezpabl...@gmail.com> >> >> > wrote: >> >> >> > > another thing... why inside the anonymous function 'this' refers to >> >> > > 'window' ?? it's totally misleading... >> >> -- >> Fernandez, Pablo. > > > -- Fernandez, Pablo.