从从JavaScript属性描述器剖析属性描述器剖析Vue.js响应式视图响应式视图
前言
JavaScript的对象,是一组键值对的集合,可以拥有任意数量的唯一键,键可以是字符串(String)类型或标记
(Symbol,ES6新增的基本数据类型)类型,每个键对应一个值,值可以是任意类型的任意值。对于对象内的属
性,JavaScript提供了一个属性描述器接口PropertyDescriptor,大部分开发者并不需要直接使用它,但是很多框架和类库内部
实现使用了它,如avalon.js,Vue.js,本篇介绍属性描述器及相关应用。
定义对象属性
在介绍对象属性描述之前,先介绍一下如何定义对象属性。最常用的方式就是使用如下方式:
本文使用字面量方式创建对象,但是JavaScript还提供其他方式,如,new Object(),Object.create(),了解更多请查看对象初
始化。
Object.defineProperty()
上面通常使用的方式不能实现对属性描述器的操作,我们需要使用defineProperty()方法,该方法为一个对象定义新属性或修
改一个已定义属性,接受三个参数Object.defineProperty(obj, prop, descriptor),返回值为操作后的对象:
1.obj, 待操作对象
2.属性名
3.操作属性的属性描述对象
由于传入一个空的属性描述对象,所以输出对象属性值为undefined,当使用defineProperty()方法操作属性时,描述对象默认
值为:
1.value: undefined
2.set: undefined
3.get: undefined
4.writable: false
5.enumerable: false,
6.configurable: false
不使用该方法定义属性,则属性默认描述为:
1.value: undefined
2.set: undefined
3.get: undefined
4.writable: true
5.enumerable: true,
6.configurable: true
默认值均可被明确参数值设置覆盖。
当然还支持批量定义对象属性及描述对象,使用“Object.defineProperties()`方法,如:
读取属性描述对象
JavaScript支持我们读取某对象属性的描述对象,使用 Object . getOwnPropertyDescriptor ( obj , prop )方法
该实例也印证了上面介绍的以不同方式定义属性时,其默认属性描述对象是不同的。
属性描述对象
PropertyDescriptor API提供了六大实例属性以描述对象属性,包括: configurable , enumerable , get , set , value , writable .
value