- From: Rob Brackett <rbrackett@apple.com>
- Date: Thu, 23 Jun 2011 15:25:13 -0700
- To: Jonas Sicking <jonas@sicking.cc>
- Cc: "Olli@pettay.fi" <Olli@pettay.fi>, "www-dom@w3.org" <www-dom@w3.org>, Jacob Rossi <jrossi@microsoft.com>
On Jun 23, 2011, at 12:13 PM, Jonas Sicking wrote:
> On Wednesday, June 22, 2011, Cameron McCormack <cam@mcc.id.au> wrote:
>> Olli Pettay:
>>> D3E could be clarified, but seems like this is anyway defined in WebIDL.
>>
>> I agree, it is defined in Web IDL. I remember changing the order in
>> which the handler is checked for (between the property and the function
>> itself) some time ago, due to feedback.
>>
>> Here is a test:
>> http://people.mozilla.org/~cmccormack/tests/eventlistener-property.html
>>
>> The first sub-test is doing
>>
>> addEventListener(…, { handleEvent: function() { … } }, …);
>>
>> and the second sub-test is doing
>>
>> function b() { … }
>> b.handleEvent = function() { … };
>> addEventListener(…, b, …);
>>
>> The results are that every browser invokes the handler in the first
>> sub-test, and for the second sub-test, Firefox/Chrome/Opera/IE use the
>> function object itself, while Safari uses the property.
>>
>> I agree that preferring the property makes some sense to me (especially
>> if you consider JS implementing an interface with more than one
>> operation on it), but the change was made to match the implementations.
>
> It is also more performant to execute the function rather than the
> property since that way you cam do decide which to use at registration
> time, rather than each time the callback is called.
That does seem like it might be slightly faster for very hot code. It's just frustrating, as a content author, that it's a little unpredictable and that it removes the easy ability to have "this" point to my object instead of to the DOM node that fired the event.
-Rob
Received on Thursday, 23 June 2011 22:25:39 UTC