...and I'll just shamelessly plug a couple of articles from the blog I keep failing to post to:
http://blog.niftysnippets.org/2008/03/mythical-methods.html http://blog.niftysnippets.org/2008/04/you-must-remember-this.html FWIW, -- T.J. :-) On Oct 17, 9:07 pm, "Jerod Venema" <[EMAIL PROTECTED]> wrote: > This is the biggest change to get used to with Javascript if you came from a > "typical" OO environment. I'm going to emphasize it again for other people > reading this thread: > > in javascript, HOW a function is called is more important than WHERE it gets > called or WHAT is calling it. > > For further reference, check out Mozilla's docs on function.apply [1]. It'll > give you insight into what .bind() is really doing behind the scenes, and > why that context parameter is important. > > -Jerod > > [1]http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_... > > On Fri, Oct 17, 2008 at 3:42 PM, T.J. Crowder <[EMAIL PROTECTED]>wrote: > > > > > > > > It's kind of understandable why context would > > > behave the way scoping (or rather identifier resolution) works. > > > Oh, completely. It's one of the big, big adjustments people like me > > have to make coming to JavaScript from C++, Java, C#, etc. All I > > meant was, having made that adjustment (er, mostly) and with my > > JavaScript hat on, I wasn't surprised to have the context of each()'s > > iterators default to the global object, because that's what I'm used > > to *in JavaScript*. If I were coding in Java, it would be very > > surprising indeed. > > > No, the whole question of whether the behavior of JavaScript's 'this' > > "pseudo-parameter" (as Crockford calls it) is surprising is a > > different thing entirely. *I* was certainly surprised by it at first, > > I don't mind saying. ;-) > > > -- T.J. :-) > > > On Oct 17, 8:33 pm, kangax <[EMAIL PROTECTED]> wrote: > > > On Oct 17, 12:08 pm, "T.J. Crowder" <[EMAIL PROTECTED]> wrote: > > > > > > It's intuitive because it's like closures work. > > > > > Not really, or at least, not if I understand what you mean. This > > > > code, for instance: > > > > > var Thingy = Class.create({ > > > > > initialize: function(name) > > > > { > > > > this.name = name; > > > > }, > > > > > showName: function() > > > > { > > > > alert("this.name = " + this.name); > > > > }, > > > > > doSomething: function() > > > > { > > > > (function(){ > > > > alert("this.name = " + this.name); > > > > })(); > > > > } > > > > > }); > > > > > If I call it like this: > > > > > var t; > > > > t = new Thingy('Fred'); > > > > t.showName(); > > > > t.doSomething(); > > > > > ...first alerts "this.name = Fred" (from showName) and then "this.name > > > > = " (from doSomething). The closure inside doSomething() does not > > > > inherit "this" from the scope in which it's called, so "this" is > > > > "window" within it. Like all other functions, "this" is determined by > > > > *how* it's called, not where. > > > > > Granted closures do inherit other aspects of context (in-scope vars > > > > and such), so if that's what you mean, I take your point. But I think > > > > that's a bit apples and oranges. > > > > Well, some people do indeed expect *context* to behave as *scope*. > > > Some people also confuse these two or believe that one depends on > > > another in some way : / It's kind of understandable why context would > > > behave the way scoping (or rather identifier resolution) works. Maybe, > > > if context was set to the caller's one, we wouldn't have all this > > > binding mess we have now. > > > > IIRC, Crockford was one of the first people to "complain" about > > > context semantics (proposing something along the lines of what Tomasz > > > expected) > > > > > > I think you should use simple example in like mine in API Docs to > > > > > illustrate it's not intuitive. > > > > > Just my two pennies worth, but it worked the way *I* expected it to. > > > > I haven't been using Prototype that long and I remember not being > > > > surprised by this, because it worked the way functions in general > > > > work: I didn't explicitly supply a context, and it got the global > > > > object. So I found it "intuitive" and would be surprised if it were > > > > something else without me telling it to be. Just FWIW. > > > > -- > > > > T.J. Crowder > > > > tj / crowder software / com > > > > [snip] > > > > -- > > > kangax > > -- > Jerod Venema --~--~---------~--~----~------------~-------~--~----~ 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-scriptaculous@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~----------~----~----~----~------~----~------~--~---