lib/observed.js
function Observable (subject, parent, prefix) {
  if ('object' != typeof subject)
    throw new TypeError('object expected. got: ' + typeof subject);

  if (!(this instanceof Observable))
    return new Observable(subject, parent, prefix);

  debug('new', subject, !!parent, prefix);

  Emitter.call(this);
  this._bind(subject, parent, prefix);
}
function Observable (subject, parent, prefix) {
  if ('object' != typeof subject)
    throw new TypeError('object expected. got: ' + typeof subject);

  if (!(this instanceof Observable))
    return new Observable(subject, parent, prefix);

  debug('new', subject, !!parent, prefix);

  Emitter.call(this);
  this._bind(subject, parent, prefix);
}
function Observable ( subject , parent , prefix ) { if ( 'object' != typeof subject ) throw new TypeError ( 'object expected. got: ' + typeof subject ) ; if ( ! ( this instanceof Observable ) ) return new Observable ( subject , parent , prefix ) ; debug ( 'new' , subject , ! ! parent , prefix ) ; Emitter . call ( this ) ; this . _bind ( subject , parent , prefix ) ; }
Observable constructor.

The passed `subject` will be observed for changes to
all properties, included nested objects and arrays.

An `EventEmitter` will be returned. This emitter will
emit the following events:

- add
- update
- delete
- reconfigure

// - setPrototype?

@param {Object} subject
@param {Observable} [parent] (internal use)
@param {String} [prefix] (internal use)
@return {EventEmitter}
Observable constructor .