defineProperty

最近去面试,有问到vue底层的数据绑定的实现原理,没答出来,刚刚看明白,这里讲讲。

defineProperty有一下几个属性

  • configuragble

    • 为true时才能改变它的值,默认 false,会有以下两个影响

1.无法delete 删除对象的属性。
var b={};Object.defineProperty(b,'name',{value:'scc'})
->Object {name: "scc"}
delete b.name
->false

2.无法通过在此defineProperty的方式设置。
var b={};Object.defineProperty(b,'name',{value:'scc'})
->Object {name: "scc"}
Object.defineProperty(b,'name',{value:'sccsss'})
->Uncaught TypeError: Cannot redefine property: name(…)
```

  • enumerable

    • 为true时才能出现在对象可以枚举属性中(Object.keys()),默认 false
  • value

    • 该属性对应的值,可以使任何有效的 JavaScript 值(数值,对象,函数等)。默认 undefined。
  • writable

  • 为true时才能通过a.b=xx的形式去修改值,默认fasle

  • get (不能和value+writable共存)

  • 查询对象的属性时会触发,比如a.b,则会触发这个函数,默认undefined。

  • set (不能和value+writable共存)

  • 设置对象的属性时会触发,比如a.b=x,则会触发这个函数,默认undefined。

defineProperty_第1张图片
example

明天用这个属性试试双向绑定,今天太晚了,睡了

你可能感兴趣的:(defineProperty)