Vue3系列

74 阅读1分钟

为什么Proxy API替代defineProperty

Object.defineProperty

定义:Object.defineProperty()方法会直接在一个对象上定义一个新的属性,或者修改一个对象的现有属性,并返回此对象

为什么能实现响应式

通过defineProperty两个属性:get和set

  • get 属性的getter函数,当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值
  • set 属性的setter函数,当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的this对象。默认为undefined,下面通过代码展示定义一个响应式函数defineReactive