vue中实现了数据响应的原理最根本是使用了Object.defineProperty , 还不知道怎么用的小伙伴们可以看下MDN,马上就能上手啦 附上网址:
Object.defineProperty()developer.mozilla.org总的来说 Object.defineProperty 接受 三个参数 ,
1.需要定义Key的对象 即object ,
2.定义对象中属性的key名城,
3.设置属性的对象 其中 该对象中可设置的属性有:
- -> value (key对应的值) 、
- -> writable (value是否可以重新定义)、
- -> enumerable (该属性key是否可以被枚举遍历) 、
- -> configerable (属性key是否可以删除)、
- -> get (get必须是一个函数 ,且函数必须有一个返回值,设置了get就不能设置value属性)
- -> set (set必须是一个函数 , 函数默认第一个参数是newValue,可以这个参数获取到新的值)
下面开始编写简易版的Vue (一步步实现)
一 、首先创建一个Vue的构造函数
function
二 、如上代码初始化数据的监听模式 ,为了方便起见把this._data 中的key全部映射Vue的实例中去(加粗为新增代码)
function
三 、实现html中字符模板的编译
function
四 、 使用订阅发布模式,监听者达到数据响应模式,实现数据和视图关联,
注意 如下代码中的 let dep =newDep();//创建发布订阅模式 , 每当递归都会重新创建,造成资源浪费, 有待优化
function
五、 实现v-model双向数据绑定
function
六、实现Computed
function