美文网首页让前端飞Vuejs
实现 MVVM (二)- 数据的劫持

实现 MVVM (二)- 数据的劫持

作者: passMaker | 来源:发表于2018-10-20 15:32 被阅读9次

之前写的 Object.defineProperty 的用法 主要说明了 Object.defineProperty 的一些用法和特性。下面使用 Object.defineProperty 实现一个数据的拦截/监听。

observe() 代码

var data = {
  name: 'evenyao',
  list: [1, 2, 3]
}
observe(data)

function observe(data) {
  if(!data || typeof data !== 'object') return
  for(let key in data) {
    let val = data[key]
    Object.defineProperty(data, key, {
      enumerable: true,
      configurable: true,
      get: function() {
        console.log(`get ${val}`)
        return val
      },
      set: function(newVal) {
        console.log(`changes happen: ${val} => ${newVal}`)
        val = newVal
      }
    })
    // 如果 val 也为对象 递归
    if(typeof val === 'object') {
      observe(val)
    }
  }
}

值得注意的:

  • getset 中的 val 不能直接用 data[key] 替代;
  • for 循环需要使用 let,使用 var 的话则需要使用立即执行函数构建闭包。

测试效果

data.name  
// get evenyao
// "evenyao"

data.name = "Hello"
// changes happen: evenyao => Hello
// "Hello"
data.list[0] = 100
// get 1
// get 2
// get 3
// get 1,2,3
// changes happen: 1 => 100
// 100

data.list
// get 100
// get 2
// get 3
// get 100,2,3
// (3) [(...), (...), (...)]

相关文章

  • Vue MVVM 原理实现

    核心原理 MVVM 双向数据绑定, 数据驱动视图 Vue 实现 MVVM 采用 数据劫持 + 发布订阅模式 : ...

  • 实现 MVVM (二)- 数据的劫持

    之前写的 Object.defineProperty 的用法 主要说明了 Object.definePropert...

  • 从 0.5 开始造轮子 仿 vue 的 mvvm(二)

    替换数据劫持对象   上一篇实现了 mvvm 实现思路,可是不够优雅还有很多问题,我先解决这个问题数据劫持的问题。...

  • 24,vue、vuex

    一,谈谈MVVM原理数据劫持 + 发布-订阅者。Object.defineProperty( )劫持getter和...

  • Vue源码03-响应式原理

    这节将专门讲解vue MVVM响应式处理 Vue采用的是 实现数据的响应式 数据劫持 Observer类 Obse...

  • vue-框架mvvm学习

    通过数据劫持实现vue(mvvm)框架 vue中最简单的表达式的使用如何实现渲染表达式里面的数据修改数据后如何更新...

  • 个人手写的MVVM

    1.MVVM(入口函数) 为vm添加数据代理 调用其他函数(数据劫持,模版编译) 2.observer(数据劫持)...

  • 解构赋值-MVVM原理解析1.2_12-27

    接着昨天mvvm原理解析1后面的数据并未实现双向绑定看以看到的是图片.png我们需要监控数据改变=>数据劫持,我们...

  • vue 响应式原理

    借助es5的Object.defineProperty实现vue数据劫持原理首先画一个html页面 看一下mvvm...

  • JS实现一个简易版的vue

    上一篇简析vue实现原理,我们知道在 Vue 的 MVVM 设计中,我们主要针对 Observer(数据劫持)、D...

网友评论

    本文标题:实现 MVVM (二)- 数据的劫持

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