The "this" is not a jQuery object, but a DOMElement.

function(i, $this) {
  // $this == $(this)
  // $this[0] == this
}

- Richard

On Tue, Jul 21, 2009 at 7:55 AM, getify <get...@gmail.com> wrote:

>
> If those functions (find, trigger, each, etc) all bind the "this" to
> the object, what's the need for additionally passing it as the second
> parameter?
>
> On Jul 21, 1:54 am, Yehuda Katz <wyc...@gmail.com> wrote:
> > On Mon, Jul 20, 2009 at 10:30 PM, David Flanagan <
> da...@davidflanagan.com>wrote:
> >
> >
> >
> > > What about the performance implications of creating those jQuery
> objects
> > > for each call?   Could you check the length property of the callback
> > > function and only pass the jQuery object if it is actually declared to
> > > expect 2 arguments?
> >
> > Yep! John and I had discussed this. I think it's the way to go.
> >
> >
> >
> > > What about modifying each() so that it passes three arguments to its
> > > callback: the index, the element, and the wrapped element:
> >
> > >  function(i, e, $e) { // e === $e[0] }
> >
> > > That avoids the compatibility problem, but loses the parallel with the
> > > other methods, unless you pass both e and $e to their callback as well.
> >
> > Nah. If we do it, we need to do it right. I'd be ok with a
> jQuery.legacyEach
> > = true, but John didn't like that ;)
> >
> >
> >
> >
> >
> >
> >
> > >        David
> >
> > > John Resig wrote:
> > > > A quick example:
> >
> > > > $(".msg").each(function(i, $this){
> > > >   $(".hide", this).click(function(){
> > > >      $this.hide();
> > > >   });
> > > > });
> >
> > > > I actually proposed this set of changes to Yehuda on IM and then had
> a
> > > > back and forth as to how to best implement them. I think they
> actually
> > > > hold some promise. I like this since it's relatively pain-free which
> > > > helping to reduce extra syntax (when dealing with closures in jQuery
> > > > it's common that you'll need to declare references to the wrapped
> jQuery
> > > > set - something that this avoids).
> >
> > > > The proposal is a set of 3 changes - each change is making the second
> > > > argument of a callback function equal to $(this).
> >
> > > >  - Modifying existing callbacks that have no second argument (like
> > > > .filter, as Yehuda mentioned).
> > > >  - Modifying event callbacks to have a second argument be $(this)
> > > > (which, can conflict with .trigger(event, data)).
> > > >  - Modifying each callbacks to have a second argument be $(this)
> > > > (replacing the existing second argument of this).
> >
> > > > Obviously changing the second incoming argument to
> > > > .each(function(i,$this)) is going to require a little bit of finesse.
> I
> > > > did a quick search on Google Codesearch but didn't see any immediate
> > > > warning signs:
> > > >http://www.google.com/codesearch?hl=en&lr=&q=
> > > > <http://www.google.com/codesearch?hl=en&lr=&q=
> > >
> >\.each\%28\s*function\%28\s*\w%2B%2C\s*\w%2B\s*\%29+lang%3Ajavascript&sbtn­=Search
> >
> > > > If we make a change like this I would like it to be an all-or-nothing
> > > > proposition (having a half-baked API modification landing seems kind
> of
> > > > lame) BUT it must be done in a way that we're sure won't break
> important
> > > > code. (At the very least, a change like this would have to be done in
> a
> > > > major 1.x release.)
> >
> > > > A quick note: It's probably important to use function(i, $this) in
> the
> > > > examples (to help differentiate it from a "normal" self [which
> generally
> > > > equates to var self = this;]).
> >
> > > > --John
> >
> > > > On Mon, Jul 20, 2009 at 11:14 PM, Yehuda Katz <wyc...@gmail.com
> > > > <mailto:wyc...@gmail.com>> wrote:
> >
> > > >     At the moment, traversal callbacks, like the ones passed to
> > > >     find/filter/etc. take a single "index" parameter. I'd like to
> > > >     propose that they are unified with .each as follows:
> >
> > > >     $("div").filter(function(i, self) {
> > > >       // stuff
> > > >     });
> >
> > > >     As a separate concern, I'd like to discuss changing the second
> > > >     parameter in both to be a jQuery object. Obviously, it would need
> to
> > > >     be done via slow deprecation for .each, but I don't think it'd
> break
> > > >     all that much code:
> >
> > > >     $("div").filter(function(i, self) {
> > > >       // self == $(this)
> > > >     })
> >
> > > >     Thoughts?
> >
> > > >     --
> > > >     Yehuda Katz
> > > >     Developer | Engine Yard
> > > >     (ph) 718.877.1325
> >
> > --
> > Yehuda Katz
> > Developer | Engine Yard
> > (ph) 718.877.1325- Hide quoted text -
> >
> > - Show quoted text -
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to