JS笔记

130 阅读1分钟

1方法Object.defineProperty() :

  • value: 该属性的值;
  • writable: 仅当值为 true 时表示该属性可以被改变;
  • get: getter (读取器);
  • set: setter (设置器);
  • configurable: 仅当值为 true 时,该属性可以被删除以及属性描述符可以被改变;
  • enumerable: 仅当值为 true 时,该属性可以被枚举。
function defineReactive (obj, key) {
  let val = obj[key]
  Object.defineProperty(obj, key, {
    get () {
      console.log(' === 收集依赖 === ')
      console.log(' 当前值为:' + val)
      return val
    },
    set (newValue) {
      console.log(' === 通知变更 === ')
      console.log(' 当前值为:' + newValue)
      val = newValue
    }
  })
}
 
const student = {
  name: 'xiaoming'
}
 
defineReactive(student, 'name') // 劫持 name 属性的读取和设置操作