js监听对象的方式

  • Post author:
  • Post category:其他


一、
const obj = {
  name: "why",
  age: 18
}

Object.defineProperty(obj, "name", {
  get: function() {
    console.log("监听到obj对象的name属性被访问了")
  },
  set: function() {
    console.log("监听到obj对象的name属性被设置值")
  }
})



Object.keys(obj).forEach(key => {
  let value = obj[key]

  Object.defineProperty(obj, key, {
    get: function() {
      console.log(`监听到obj对象的${key}属性被访问了`)
      return value
    },
    set: function(newValue) {
      console.log(`监听到obj对象的${key}属性被设置值`)
      value = newValue
    }
  })
})

二、ES6
const obj = {
  name: "why",
  age: 18
}

const objProxy = new Proxy(obj, {
  // 获取值时的捕获器
  get: function(target, key) {
    console.log(`监听到对象的${key}属性被访问了`, target)
    return target[key]
  },

  // 设置值时的捕获器
  set: function(target, key, newValue) {
    console.log(`监听到对象的${key}属性被设置值`, target)
    target[key] = newValue
  }
})



版权声明:本文为weixin_44283589原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。