- 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