O'Reilly logo

JavaScript: The Good Parts by Douglas Crockford

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Parts

We can compose objects out of sets of parts. For example, we can make a function that can add simple event processing features to any object. It adds an on method, a fire method, and a private event registry:

var eventuality = function (that) { var registry = {}; that.fire = function (event) { // Fire an event on an object. The event can be either // a string containing the name of the event or an // object containing a type property containing the // name of the event. Handlers registered by the 'on' // method that match the event name will be invoked. var array, func, handler, i, type = typeof event === 'string' ? event : event.type; // If an array of handlers exist for this event, then // loop through it and execute the handlers in order. if (registry.hasOwnProperty(type)) { array = registry[type]; for (i = 0; i < array.length; i += 1) { handler = array[i]; // A handler record contains a method and an optional // array of parameters. If the method is a name, look // up the function. func = handler.method; if (typeof func === 'string') { func = this[func]; } // Invoke a handler. If the record contained // parameters, then pass them. Otherwise, pass the // event object. func.apply(this, handler.parameters || [event]); } } return this; }; that.on = function (type, method, parameters) { // Register an event. Make a handler record. Put it // in a handler array, making one if it doesn't yet // exist for this type. var handler = { method: method, parameters: parameters }; if (registry.hasOwnProperty(type)) ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required