实现一个简单版本的vue及源码解析

本文介绍了Vue.js的响应式原理,依赖于Object.defineProperty,通过setter/getter监听数据变化,实现依赖收集以提高性能。文章还展示了如何简单实现数据绑定,包括观察者Observer和依赖收集器Dep,并提供了测试用例。
摘要由CSDN通过智能技术生成

Vue.js的响应式原理依赖于Object.defineProperty,尤大大在Vue.js文档中就已经提到过,这也是Vue.js不支持IE8 以及更低版本浏览器的原因。Vue通过设定对象属性的 setter/getter 方法来监听数据的变化,通过getter进行依赖收集,而每个setter方法就是一个观察者,在数据变更的时候通知订阅者更新视图。

Let data to observable

首先假定一种最简单的情况,不去考虑其他情况。在initData中会调用observe这个函数将Vue的数据设置成observable的。当_data数据发生改变的时候就会触发set,对订阅者进行回调(在这里是render)。

function observe(value, cb) {
 Object.keys(value).forEach((key) => defineReactive(value, key, value[key] , cb))
}
function defineReactive (obj, key, val, cb) {
 Object.defineProperty(obj, key, {
 enumerable: true,
 configurable: true,
 get: ()=>{
 /*....依赖收集等....*/
 /*Github:https://github.com/answershuto*/
 return val
 },
 set:newVal=> {
 val = newVal;
 cb();/*订阅者收到消息的回调*/
 }
 })
}

为了操作方便,我们需要将 _data 上的数据代理到vm实例上.

function proxy (data) {
 const that = this;
 Object.keys(data).forEach(key => {
 Object.defin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值