美文网首页
vue中data的访问原理

vue中data的访问原理

作者: b59a2ae26f20 | 来源:发表于2020-02-19 19:55 被阅读0次

在vue规范中data里定义的数据xx,可以直接通过this.xx直接访问。这是有原因的,下面截取部分源码

const sharedPropertyDefinition = {
  enumerable: true,
  configurable: true,
  get: null,
  set: null
}
function proxy (target, sourceKey, key) {
  sharedPropertyDefinition.get = function proxyGetter () {
    console.log(this)
    return this[sourceKey][key]
  }
  sharedPropertyDefinition.set = function proxySetter (val) {
    this[sourceKey][key] = val
  }
  Object.defineProperty(target, key, sharedPropertyDefinition)
}
// 以下为仿照
function vue() {
    this._data = {
        aa: 'aaa',
        bb: 'bb'
    }
}
const vm = new vue()
const keys = Object.keys(vm._data)
let i = keys.length
while(i--) {
    const key = keys[i]
    proxy(vm, '_data', key)
}
vm.aa = 'a-a'
console.log(vm.aa) // 打印结果为a-a

以访问aa为例子,上面的代码其实写成下面的形式也是一样的

const sharedPropertyDefinition = {
  enumerable: true,
  configurable: true,
  get: function proxyGetter () {
    return this['_data']['aa']
  },
  set:function proxySetter (val) {
    return this['_data']['aa'] =val
  }
}
function vue() {
    this._data = {
        aa: 'aaa',
        bb: 'bb'
    }
}
const vm = new vue()
  // 访问aa的时候就会走proxyGetter,拿到_data中的aa
Object.defineProperty(vm, 'aa', sharedPropertyDefinition)
vm.aa = 'a-a'  // 为aa赋值时,就会走proxyGetter
//上图的proxy函数,其实是循环data中的变量,反复通过defineProperty为vm定义属性
console.log(vm.aa) // 结果为a-a

相关文章

  • vue中data的访问原理

    在vue规范中data里定义的数据xx,可以直接通过this.xx直接访问。这是有原因的,下面截取部分源码 以访问...

  • vue 中script 标签 有哪些属性 (vue实例有哪些属性

    <1>数据访问 (1) $data: vue实例观察的数据对象,Vue实例代理了对其data对象属性的访问 (2)...

  • Vue面试题集锦

    VUE的双向绑定原理 原理:在创建Vue实例时,Vue会遍历data选项的属性,利用Object.definePr...

  • vue内部数据变更监测原理

    Vue监视数据的原理: 1、vue会监视data中所有层次的数据 2、如何监测对象中的数据? ...

  • Vue来一点料

    一、Vue-cli构建的项目目录 二、Vue双向数据绑定 原理 Vue遍历data对象中的所有数据,使用Objec...

  • 2022年vue面试题总结

    vue 中 data 为什么是一个函数 vue 组件的通信 vuex 的原理 vue 生命周期 v-if 与 v-...

  • 2020-03-31-vue源码学习

    1.为什么在vue中访问this.message而不是访问的this.data.message?会在初始化的时候把...

  • 实现一个 vue 的双向绑定

    vue2.x 使用 Object.defineProperty() 实现数据的响应 原理:递归遍历 data 中的...

  • 微信小程序之watch属性值(仿Vue)

    Vue通过监听watch属性来观测Vue实例数据的变化。 监听器的原理,将data中需监听的属性写在watch对象...

  • 前端面试题

    vue篇 1.双向绑定是什么意思?VUE双向绑定原理?答:双向是指ViewModel中的data部分和View之间...

网友评论

      本文标题:vue中data的访问原理

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