Testing: Watching via get/set

by andypotanin

JavaScript

console.clear();

var Original = {
    name: '',
    age: 27,
    hash: +new Date
}

var Watched = Object.create( Original, {
  modified: { 
    value: function (key, before, after) { console.log('Changed', key, 'from', before || null, 'to', after || null); } 
  },
  name: {
    get: function name() { return Object.getPrototypeOf(this)[arguments.callee.name]; },
    set: function name(value) { this.modified( arguments.callee.name, Object.getPrototypeOf(this)[arguments.callee.name], Object.getPrototypeOf(this).name = value ); }
  },
  hash: {
    get: function hash() { return Object.getPrototypeOf(this)[arguments.callee.name]; },
    set: function hash(value) { this.modified( arguments.callee.name, Object.getPrototypeOf(this)[arguments.callee.name], Object.getPrototypeOf(this).hash = value ); }
  }    
});

Watched.name = 'Andy';
Watched.name = 'Andy Potanin';
Watched.name = '';

//setInterval( function() { Watched.hash = +new Date; }, 1000 );

//console.log('name', Original.name);
//console.log('age', Original.age);
//console.log('hash', Original.hash);