Re: whether [Callback=FunctionOnly] should be the default

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