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) {
    
    this._events = {};

    
    EventEmitter.call(this);
    attributes = attributes || {};

    
    this._separator = ':';

    
    this.attributes = {};

    
    this._changed = {};
    
    
    this._silent  = {};
    
    
    this._pending = {};

    
    this.set(attributes, { silent: true });

    
    this._changes = {};
    this._silent  = {};
    this._pending = {};

    
    this._previous = _.clone(this.attributes);

    
    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
Model implementation based on Backbone . js Model implementation .