Le 10/07/2013 16:53, Andrea Giammarchi a écrit :
Just a humble attempt to propose some addiction to the `Object.prototype` I already know many will kill me for even trying to ...

**tl;dr** - everything proposed can be already tested through this utility called [eddy.js](https://github.com/WebReflection/eddy#event-driven-js)

### Event Target All The Things
One of the most widely adopted API in JavaScript world is based on a combination of these methods:

* `.on(type, handler[, capture])` used as equivalent of `addEventListener` in the DOM namespace, also used in every library that would like to be event driven. Smart enough to avoid duplicated entries for the same handler over the same event type. * `.once(type, handler[, capture])` used to simplify `.on()` within an `.off()` at the top of the invocation to ensure a "one shot only" event * `.off(type, handler[, capture])` to remove a previously set event handler or silently failif not present * `.emit(type[, arg1][, argN])` directly from node.js world where almost every object is an EventTarget and EventEmitter anyhow since it's needed and has been proven it's a highly appreciated/welcome approach. * `.trigger(type[, data])` similar to `.emit()` except it triggers/fires an event object with some extra method such `evt.stopImmediatePropagation()` or others DOM related when the event comes from DOM

The proposed implementation lazily assign internal listeners event handlers only once these methods are invoked for the very first time.

This makes every object
... inheriting from Object.prototype...

able to be promoted at runtime as event emitter:
```javascript
var o = {};
// o is just an object

o.on('event-name', console.log.bind(console));
// now o has internals able to work with handlers

o.trigger('event-name');
// will log an Event object
```

I believe events should be part of the object MOP interface (regardless of the [[Prototype]] value). Events are already part of the interface of objects as people use them: * in Node.js, events are documented at the same level than properties and methods. * In new FirefoxOS WebAPIs, pretty much every new object inherits from EventTarget.

Also, Object properties now have their events (Object.observe), following DOM mutation-related events (DOM Observers API). It won't take long before someone asks for mutation events in ES6 Maps and Sets...

Anyway, I agree with the intent, but I would put the tool at a lower-level if given the choice.

David
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to