mvvm test1

by keminu

Babel + JSX

const OP = Object.prototype;

class Mvvm{
    constructor(obj, callback){
        if(OP.toString.call(obj) !== '[object Object]'){
            console.error('This parameter must be an object:' + obj);
        }
        this.$callback = callback;
        this.observe(obj);
    }
    
    observe(obj){
        Object.keys(obj).forEach(function(key, index, keyArray){
            var val = obj[key];
            Object.defineProperty(obj, key, {
                get: function(){
                    return val;
                },
                set: (function(newVal){
                    this.$callback(newVal);
                }).bind(this)
            });
            
            if(OP.toString.call(obj[key]) === '[object Object]'){
                this.observe(obj[key]);
            }
            
        }, this);
        
    }
}
var callback = function(newVal){
                alert(newVal);
            };
            
            var data = {
                a: 200,
                level1: {
                    b: 'str',
                    c: [1, 2, 3],
                    level2: {
                        d: 90
                    }
                }
            }
            
            var m = new Mvvm(data, callback);
            
            data.a = 250;
            data.level1.b = 'sss';
            data.level1.level2.d = 'msn';