vue的双向绑定原理:
vue数据的双向绑定核心就是通过Object.defineProperty()方法设置set和get函数来实现数据的劫持,在数据变化时可以监听到变化的数据,来实现数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变。
-
数据劫持Observer
Javascript中,如果对象的属性发生了变化,就需要通知我们,我们就可以把更改后的属性更新到对应的DOM节点中去。 -
数据监听
要实现数据监听就要用到Object.defineProperty()方法,去修改对象的现有属性。 -
getter(),setter()
在方法中加入getter() {} 和setter() {} ,对数据获得和修改具体操作。 -
这样就只能监测到一层数据,要实现每一层都要检测到就需要利用递归。在forEach遍历后进行递归 调用Observer()。
Object.defineProperty
定义:Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
语法:Object.defineProperty(obj,prop,descriptor)
参数
属性 | 说明 |
---|---|
obj | 目标对象 |
prop | 需要定义的属性或方法的名字 |
descriptor | 目标属性所拥有的特性 |