美文网首页
模拟mvvm模式

模拟mvvm模式

作者: TerdShow | 来源:发表于2019-08-05 15:21 被阅读0次
function update() {
  console.log('update view')
}

// let obj = {
//   name: {
//     n: 1
//   }
// }


let arr = [1, 2, 3];


let oldProto = Array.prototype; //获取数组原有方法
let proto = Object.create(oldProto); // 复制一份,避免影响正常数组操作

['push', 'pop', 'shift', 'unshift', 'reverse', 'sort', 'splice'].forEach(item => {
  proto[item] = function () { //修改拷贝后的数组方法
    update();
    oldProto[item].apply(this, arguments);
  }
})

function observer(value) {
  if (Array.isArray(value)) {
    return value.__proto__ = proto;
  }
  if (typeof value !== 'object') {
    return value;
  }
  for (let key in value) {
    defineReactive(value, key, value[key]);
  }
}

function defineReactive(obj, key, value) {
  observer(value); //(1)如果value为一个对象时,需要继续增加getter setter
  Object.defineProperty(obj, key, {
    get() {
      return value;
    },
    set(newVal) {
      if (newVal !== value) {
        observer(newVal); //(2)
        value = newVal;
        update();
      }
    }
  })
}

// observer(obj);
// obj.name.n = 100; // (1)

// obj.name = {
//   n: 100
// }; // (2) 给obj.name赋了新值: {n: 100} , 该值上也需要增加setter getter
// obj.name.n = 200;


observer(arr);
arr.push(1);

相关文章

  • 模拟mvvm模式

  • 初识Vue

    1. MVVM模式 Vue采用MVVM(Model-View-ViewModel)模式实现,MVVM模式由MVC演...

  • Vue快速入门

    MVVM模式 什么是MVVM模式? MVVM(Model-View-ViewModel)是一种软件架构设计模式,由...

  • vue面试问题

    1.MVVM模式和MVC模式 MVVM模式是Model-View-ViewModel的缩写。MVVM是一种设计...

  • MVVM在前端(web)使用

    前端框架vue,MVVM模式 今天咱们不谈iOS,说说web(MVVM模式)。MVVM模式在前端开发应该还是挺多的...

  • MVVM模式架构设计

    环境 AndroidStudio 2.1 MVVM模式 MVVM模式:View,ViewModel,Model,三...

  • Vue之MVVM模式和第一个Vue程序

    一、MVVM模式和第一个Vue程序 目录:MVVM模式、第一个Vue程序 1.MVVM模式 1)什么是MVVM?M...

  • 初识react框架

    1、react 起源于facebook MVVM模式 适用于大中型项目(1)通过对dom的模拟 减少DOM的交...

  • Android MVVM 入门教程

    1. MVVM 模式 架构理解 MVVM 模式,即指 Model-View-ViewModel。它将 View 的...

  • iOS MVVM架构总结

    参考:iOS 中MVC设计模式iOS MVVM架构iOS MVVM-框架介绍iOS 架构模式MVVM的实践总结iO...

网友评论

      本文标题:模拟mvvm模式

      本文链接:https://www.haomeiwen.com/subject/oyemdctx.html