Re: Functions that Implement the EventListener Interface (DOM Level 3 Events)

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