- From: Marcos Caceres <w3c@marcosc.com>
- Date: Wed, 29 Feb 2012 19:35:45 +0000
- To: Boris Zbarsky <bzbarsky@mit.edu>
- Cc: www-dom@w3.org
On Wednesday, February 29, 2012 at 7:11 PM, Boris Zbarsky wrote:
> On 2/29/12 1:37 PM, Marcos Caceres wrote:
> > In the sense that say:
> > 1. given "var a = { }"
> > 2. … some magic… e.g., EventListener.create( a );
> > 3. would have .addEventListener(), .removeEventListener(), .dispatchEvent() as properties attached.
>
>
>
> How is this different from just doing |new EventListener()| exactly?
Well, I might have a fully developed object I want to add this functionality to. For example:
function MySuperDuperThingo(){
this.doesSomethingAwesome = function(){..};
this.thatIsAwesome = function(){…};
this.x = "foo";
EventTarget.create(this); //or whatever syntax
}
var thing = new MySuperDuperThingo();
thing.addEventListener("some", cb)
That instead of having to wrap the instance of new EventTarget():
function MySuperDuperThingo(){
var et = EventTarget.create();
this.addEventListener = function (e,t){
et.addEventListener(e,t)
}
}
> > (I won't pretend to use the right ECMAScript terminology here… be it the prototype chain or whatever)
>
> Well, that's the part that matters, now isn't it?
Perhaps. I just wanted to bring the use case for consideration (and some evidence that people want this as a core part of the platform).
> > So, you get an Object that has a __proto__ with properties:
> >
> > constructor: function Object() { [native code] }
> > hasOwnProperty: function hasOwnProperty() { [native code] }
> > isPrototypeOf: function isPrototypeOf() { [native code] }
> > propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
> > toLocaleString: function toLocaleString() { [native code] }
> > toString: function toString() { [native code] }
> > valueOf: function valueOf() { [native code] }
> > addEventListener: function addEventListener() { [native code] }
> >
> > removeEventListener: function removeEventListener() { [native code] }
> >
> >
> > dispatchEvent: function dispatchEvent() { [native code] }
>
> OK, so that looks like EventListener.prototype. Where does |a| come in?
"a" now has "addEventListener" in its prototype chain. So:
a.addEventListener("foo", function(){…do something useful...})
var e = new CustomEvent('foo')
a.dispatchEvent(e)
Received on Wednesday, 29 February 2012 19:36:19 UTC