I mean the the getter/setter functions are the ones that doesn't get
immediately executed.

But if you're really new to this maybe you could start with something
that's easier to digest, like Douglas Crockford's videos on YDN. I
only say this because I also started to read this book (or was it the
Pro JS Design Patterns?) when I knew next to nothing about javascript
but it was quite frustrating experience then :)

http://video.yahoo.com/search/?p=The+JavaScript+Programming+Language
http://video.yahoo.com/search/?p=advanced+JavaScript

On Dec 18, 7:45 pm, "pablo fernandez" <fernandezpabl...@gmail.com>
wrote:
> 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.

Reply via email to