(function(){ var addChange = function(ob){ ob.change = function(callback){ if(callback){ if(!this._change) this._change = []; this._change.push(callback); }else{ if(!this._change) return; for(var i = 0; i < this._change.length; i++){ this._change[i].apply(this); }; }; }; }; var object = {}; object.name = 'Foo'; addChange(object); object.change(function(){ console.log('変更されました!', this); }); object.change(); object.name = 'Bar'; object.change(); }());