Edit in JSFiddle

// ネイティブjavascriptオブジェクト
var model = {
    title: 'this is Object.observe'
};

// 監視用コールバックを定義
function observer(changes){
    
    // changesのlengthを見てみる
    lf.log('changes length: ' + changes.length);
    
    changes.forEach(function(change, i){
        lf.log("[change " + i + "]");
        lf.log(change.name); // 変更があったpropertyの名前
        lf.log(change.type); // 変更の種類
    });
}

// Object.observeでmodelを監視
// 変更があればobserverを呼び出す
Object.observe(model, observer);

// modelに新しいプロパティを追加してみる
model.desc = 'this is description of model!'

// model.titleを変更してみる
model.title = 'chaaaaaaaaaange!';

// definePropertiesでプロパティ設定を変更してみる
Object.defineProperties(model, {title: {enumerable:false}});

// model.titleを削除してみる
delete model.title;

// model自体を変更してみる
mode = null;