tips:只做了一层简单的监视,data里面含有多层嵌套就失效了。

    1. let data = {
    2. name: 'syukinmei',
    3. address: 'zhejiang'
    4. }
    5. function Observer(obj) {
    6. // 汇总对象中所有的属性形成一个数组
    7. const keys = Object.keys(obj)
    8. keys.forEach(k => {
    9. Object.defineProperty(this, k, {
    10. get() {
    11. console.log(this, obj, '的getter调用了');
    12. return obj[k];
    13. },
    14. set(val) {
    15. obj[k] = val;
    16. console.log(obj, `${k}被修改了,我要去解析模板,生成虚拟DOM了`);
    17. }
    18. })
    19. })
    20. }
    21. // 创建一个监视的实例对象,用于监视data中属性的变化
    22. const obs = new Observer(data);
    23. console.log('obs', obs);
    24. // vm实例对象,模拟new了一个Vue
    25. const vm = {};
    26. vm._data = data = obs;

    image.png
    image.png