赞
踩
作为一个前端菜鸟来说,Vue框架其实还算是蛮复杂的,所以决定先通过渐进式的方式实现一个最基础的Vue响应式功能,Vue其实基础功能简单来说就以下几点:
目前的todoList:
观察者模式就是当一个对象(目标)被修改时,则会自动通知依赖它的对象(观察者)。
所以我们可以分别给两者定义一个类,实现一些模式方法:
// 发布者-目标 class Dep { constructor () { // 记录所有的订阅者 this.subs = [] } // 添加订阅者 addSub (sub) { if (sub && sub.update) { this.subs.push(sub) } } // 发布通知,依次调用每个观察者的update()方法【通知】 notify () { this.subs.forEach(sub => { sub.update() }) } } // 订阅者-观察者 class Watcher { update () { console.log('update') } } // 测试 let dep = new Dep() // 目标(发布者) let watcher = new Watcher() // 观察者(订阅者) dep.addSub(watcher) // 订阅 dep.notify() // 通知
其中整体结构可以按类进行划分,每一块单独定义一个JS文件,实现它所负责的功能:
结构:
class Vue { constructor(options){ // 1、通过属性保存选项的数据,默认为空对象 this.$options = options || { } this.$data = options.data || { } // 绑定DOM对象(字符串则通过DOM查询获取DOM) this.$el = typeof options.el === 'string' ? document.querySelector(options.el) : options.el // 2、把data中的成员转化为getter和setter,注入到vue实例中 this._proxyData(this.$data) // 3、调用observe对象,监听数据的变化 new Observer(this.$data) // 4、调用compiler解析指令、插值表达式 new Compiler(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。