理解对象及对象的属性
一:理解对象的属性
属性类型:数据属性和访问器属性
1数据属性:数据属性有四个描述其行为的特性
1.1 Configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否将属性修改为访问器属性
1.2 Enumerable:表示能否通过for-in循环返回属性,
1.3 Writable:能够修改属性的值
1.4 Value:包含这个属性的值,读取属性的值的时候在这里读取,写入属性的值,将新值保存在这个地方
要修改属性默认的特性:Object.defineProperty(),该方法接收三个参数,属性所在的对象,属性的名字和属性的特性(描述符对象)
注意1:一旦将属性的特性Configurable定义为false不可配置,就不能再将他变回可配置
2访问器属性:访问器属性不包含数据值,它们包含一对getter和setter函数,访问器有四个特性
2.1 Configurable
2.2 Enumerable
2.3 Get 在读取属性时调用的函数
2.4 Set 在写入属性时调用的函数
访问器属性不能直接定义,必须使用Object.defineProperty()来定义
3读取属性的特性Object.getOwnPropertyDescriptor(),该方法接收两个参数,属性所在的对象,属性的名称,返回值是一个对象
二:理解双向绑定
双向数据绑定:将对象属性的变化绑定到UI,不管是对象属性的变化还是UI的改变,都会改变另外一方。
双向绑定的底层思想:1我们需要一个方法来知道那个UI元素绑定了那个相对应的属性,2我们需要监视UI元素和属性的变化,3我们需要将变化传播到绑定的对象和UI上面
发布-订阅模式:监听一个事件(订阅),触发事件(发布),移除事件
脏值检查模式:在特定的事件下,去检测数据有没有改动
数据劫持:通过Object.defineProperty()来劫持各个属性的getter与setter,来知道数据是否已经发生改变。
vue.js的双向数据绑定就是发布-订阅与数据劫持的组合,通过Object.defineProperty()来劫持各个属性的getter与setter,然后在数据变动时发布给订阅者,触发相应的回调。
三:理解对象
四:对象的拷贝