Vue 采用数据劫持结合发布者-订阅者模式的方式来实现数据的响应式,通过Object.defineProperty来劫持数据的setter,getter,在数据变动时发布消息给订阅者,订阅者收到消息后进行相应的处理。 要实现mvvm的双向绑定,就必须要实现以下几点: Compile—指令解析系统,对 ...
分类:
其他好文 时间:
2019-02-14 20:19:11
阅读次数:
172
首先,我们得明白Vue数据响应的原理: 以对象为例:当把一个JavaScript对象传给Vue实例的data选项时,Vue将遍历此对象所有的属性,并使用Object.defineProperty把这些属性全部转为getter/setter, 而getter/setter可以做到追踪依赖,在属性被访问 ...
分类:
其他好文 时间:
2019-02-11 12:31:40
阅读次数:
180
vue的依赖收集是定义在defineReactive方法中,通过Object.defineProperty来设置getter,红字部分主要做依赖收集,先判断了Dep.target如果有的情况会执行红字逻辑进行依赖收集过程 Dep是一个类,target是Dep的一个静态属性,是一个Watcher,上面 ...
分类:
其他好文 时间:
2019-02-08 14:33:26
阅读次数:
134
VueJS 使用 ES5 提供的 Object.defineProperty() 方法实现数据绑定。 感觉实现时主要是在defineProperty的set和get上做了很多文章,在get中确定了data和view的依赖关系,这样在data改调用set时就可以根据依赖修改view。 [Object.... ...
分类:
其他好文 时间:
2019-01-27 21:51:46
阅读次数:
222
今天用原生js来实现一个数据的双向绑定 知识点:object.defineProperty() 三个参数: 第一个:要定义属性的对象, 第二个:要定义或者修改的属性的名称 第三个:将被定义或者修改的属性的描述 ...
分类:
Web程序 时间:
2019-01-25 16:31:29
阅读次数:
179
defineProperty是什么: 该函数可以直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。通俗理解就是: 给对象添加一个新的属性,或者针对对象里的某些属性,可以给这个属性设置一些特性,比如是否只读,是否可以被for..in或Object.keys()遍历等 语法: ...
分类:
其他好文 时间:
2019-01-22 19:12:04
阅读次数:
326
Object.defineProperty() 和 Proxy 对象,都可以用来对数据的劫持操作。何为数据劫持呢?就是在我们访问或者修改某个对象的某个属性的时候,通过一段代码进行拦截行为,然后进行额外的操作,然后返回结果。那么vue中双向数据绑定就是一个典型的应用。 Vue2.x 是使用 Objec ...
分类:
其他好文 时间:
2019-01-12 22:50:02
阅读次数:
253
内置提供了一个对象为 Object ,也被称之为是构造函数,用来创建对象用的。在 javascript 函数也是对象,是一种可被执行的对象,所以称Object为对象也是可以的。挂在函数上的方法,称之为静态方法。 Object.defineProperty() 如果对这个方法不了解,必须先看,下面的某 ...
分类:
其他好文 时间:
2019-01-05 19:48:39
阅读次数:
164
VueJS 使用 ES5 提供的 Object.defineProperty() 方法实现数据绑定。 感觉实现时主要是在defineProperty的set和get上做了很多文章,在get中确定了data和view的依赖关系,这样在data改调用set时就可以根据依赖修改view。 [Object.... ...
分类:
其他好文 时间:
2019-01-03 00:43:03
阅读次数:
193
1. Object.defineProperty 在一个对象上定义一个新属性,或修改一个已经存在的属性, 最终返回这个对象。 o: 需要定义属性的 对象。 p:要定义或修改的 名称 或 属性。 descriptor : 正在定义或修改属性的描述符。 descriptor : configurable ...
分类:
其他好文 时间:
2019-01-02 12:34:43
阅读次数:
189