vue深入浅出第1章
变化侦测
Js有两种侦测变化,一种事Object.defineProperty,一种就是es6的Proxy。
那么什么是Object.defineProperty?
这个方法接受3个参数:
- 属性所在的对象
- 属性的名字
- 一个描述符对象
什么是描述符对象?
数据属性:
- configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值为false。
- enumerable:表示能否通过for in循环访问属性,默认值为false。
- writable:表示能否修改属性的值。默认值为false。
- value:包含这个属性的数据值。默认值为undefined。
configurable属性解析
let info = {
name: "Dorr"
}
Object.defineProperty(info, "name", {
configurable: false
})
delete info.name
console.log(info.name);上述代码可以发现当configurable的值时fasle 的时候,使用的delete是无法删除属性。而当其是true时,打印的info.name就是undefined。
writable属性解析,详细代码如下:
Object.defineProperty(info, "age", {
writable: false,
value: 15
})
info.age = 20
console.log(info.age);//15上述代码的意思就是我们给info对象新增一个名为age的属性,但是因为writable的是false,因此我们无法对age的值i进行修改。最后打印的值依然是15。
enumerable属性解析
当给这个属性的值设置为属性后,就无法使用迭代遍历器迭代出age属性的值。