- From: Ian Hickson <ian@hixie.ch>
- Date: Tue, 28 Jun 2011 22:23:09 +0000 (UTC)
- To: Cameron McCormack <cam@mcc.id.au>
- cc: public-script-coord@w3.org
On Mon, 27 Jun 2011, Cameron McCormack wrote: > > In Web IDL currently, if you write [Callback] on an interface and the > interface consists of a single operation, then script can implement that > interface either by using a Function object, or by providing an object > with a property whose name is the identifier of the operation. I've always assumed that the latter was a side-effect of non-JS languages needing something more complicated here than just a function reference: if the old DOM specs had never targetted anything but JS, would we support the non-function case? Consider setTimeout(), which only takes a function (or a string, for legacy reaons). > Olli gave a good example of why you might want to allow objects-with-a- > property to be used as callback objects, which is so that you can > encapsulate some state in that object. > > var handler = { > _highlighted: false, > handleEvent: function(evt) { > this._highlighted = !this._highlighted; > evt.target.style.color = this._highlighted ? "red" : "black"; > } > }; > e.addEventListener("click", handler, false); (function () { var highlighted = false; e.addEventListener("click", function (event) { highlighted = !highlighted; event.target.style.color = highlighted ? "red" : "black"; }, false); })(); -- Ian Hickson U+1047E )\._.,--....,'``. fL http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,. Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
Received on Tuesday, 28 June 2011 22:23:45 UTC