It is my understanding they aren't. 'this' is the item in the obj/arr,
first param is index (I'm guessing 'key' in the obj case). istm this
prevents you from ever manipulating the context of the iteration
callbacks mentioned. Am I wrong?
Regards
Peter
getify 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>>