lib/model.js
function Model(attributes) {
    // Set events hash now to prevent proxy trap
    this._events = {};

    // Call super constructor
    EventEmitter.call(this);
    attributes = attributes || {};

    // Separator for change events
    this._separator = ':';

    // Internal Object for storing attributes
    this.attributes = {};

    // Attributes that have changed since the last `change` was called.
    this._changed = {};
    // Hash of attributes that have changed silently since the last `change`
    // was called.
    this._silent  = {};
    // Hash of changed attributes that have changed since the last `change`
    // call began.
    this._pending = {};

    // Set initial attributes silently
    this.set(attributes, { silent: true });

    // Reset changes
    this._changes = {};
    this._silent  = {};
    this._pending = {};

    // Keep track of previous values (before the previous change call)
    this._previous = _.clone(this.attributes);

    // Call initialize logic
    this.initialize.apply(this, arguments);
}
function Model(attributes) {
    // Set events hash now to prevent proxy trap
    this._events = {};

    // Call super constructor
    EventEmitter.call(this);
    attributes = attributes || {};

    // Separator for change events
    this._separator = ':';

    // Internal Object for storing attributes
    this.attributes = {};

    // Attributes that have changed since the last `change` was called.
    this._changed = {};
    // Hash of attributes that have changed silently since the last `change`
    // was called.
    this._silent  = {};
    // Hash of changed attributes that have changed since the last `change`
    // call began.
    this._pending = {};

    // Set initial attributes silently
    this.set(attributes, { silent: true });

    // Reset changes
    this._changes = {};
    this._silent  = {};
    this._pending = {};

    // Keep track of previous values (before the previous change call)
    this._previous = _.clone(this.attributes);

    // Call initialize logic
    this.initialize.apply(this, arguments);
}
Model implementation based on Backbone.js' Model implementation.

The Model object uses an internal hash to store it's values and
emits events on Model attribute changes.

@param {Object} attributes   Initial attributes for the Model