美文网首页
手动实现一下vue的基本原理

手动实现一下vue的基本原理

作者: 行走在黑夜下的舞者 | 来源:发表于2021-08-18 22:42 被阅读0次

刚刚看了一些源码有感,所以来挑战一下自己, 我们都知道vue2.x原理就是Object.defineProperty(),这个方法的官方描述就是方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象,这个方法接受三个参数,一个是你传入的对象,一个是key,一个是对象的描述。关键就在于对象的描述

对象的描述也是一个对象,你可以把它当成对当前这个对象的包装操作一样,它也包含了几个重要属性,这里就讲四个用到的,

configurable

当且仅当该属性的 configurable 键值为 true 时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。

默认为 false

enumerable

当且仅当该属性的 enumerable 键值为 true 时,该属性才会出现在对象的枚举属性中。

默认为 false

get

属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。

默认为undefined

set

属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的 this 对象。

默认为 undefined

了解了上面四个属性 我们就可以来挑战写一下vue的基本原理了

function ob(val) {

  console.log('视图更新了');

}

function definePropertys(obj, key, value) {

Object.defineProperty(obj, key, {

configurable: true,

enumerable: true,

get: function() {

 console.log('我被调用了')

 return value

},

set: function(nVal) {

if(nVal === value) return

ob(nVal)

}

})

}

function observa(obj) {

Object.keys(obj).forEach(row => {

definePropertys(obj, row, obj[row])

})

}

class Vue {

 constructor(options) {

this.data = options.data

observa(this.data)

}

}

let ob = new Vue({

data: {

test: 1

}

})

ob.data.test = 3 // 视图更新啦

好啦,完美解决~

相关文章

  • 手动实现一下vue的基本原理

    刚刚看了一些源码有感,所以来挑战一下自己, 我们都知道vue2.x原理就是Object.definePropert...

  • vue 智能检索提示--手动定位

    手动定位,输入关键词,实现智能提示 要实现的效果 vue 引入vue-baidu-map 使用npm 引入 在v...

  • 手动实现Vue(1.0)

    现在vue3.0版本已经发布了,各种工具也已经对vue3.0做了支持,最近有时间,想学习下源码,这边文章主要是对v...

  • Vue 核心之数据劫持

    Vue 核心之数据劫持 Angular、Regular、Vue、React等等可以实现数据绑定,再也不需要手动进行...

  • Vue面试准备

    (1)vue的三要素 模板, (2)vue是如何实现双向绑定的? 基本原理:数据驱动页面,页面映射数据 核心API...

  • Vue原理学习(二)

    响应式系统的基本原理 Vue基于Object.defineProperty来实现响应式,对于Object.defi...

  • jest基本原理(手动实现)

    通过以上方法就可以实现对下面两个方法的自动化测试。

  • Vue响应式的基本原理 - 实现一个Mini Observer

    今天看了一个尤大神介绍Vue中实现响应式基本原理的视频, 把视频内容总结一下。 首先是问题的提出: 什么响应式(R...

  • Vue 实现手动刷新组件

    开发过程遇到了一个问题,就是我的 router-view 里面渲染出来的组件输入数据之后,我点击 路由视图外边的导...

  • 手动实现简单Vue Router

    如果用官方的router就安装 vue add router然后选no 哈希模式 main.js 在main.js...

网友评论

      本文标题:手动实现一下vue的基本原理

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