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
This archive was generated by hypermail 2.3.1 : Wednesday, 8 May 2013 19:30:03 UTC