首页 > 其他 > 详细

Object.defineProperty() 方法的使用

时间:2021-08-14 23:39:03      阅读:37      评论:0      收藏:0      [点我收藏+]
 
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
 
const obj1 = {
        age: 18,
        color: ‘yellow‘,
        gender: ‘male‘,
        work: ‘true‘
      }
      /*  对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。
      数据描述符是一个具有值的属性,该值可以是可写的,也可以是不可写的。
      存取描述符是由 getter 函数和 setter 函数所描述的属性。一个描述符只能是这两者其中之一;不能同时是两者 */
      // writable 默认false 意思是 不可改变
      Object.defineProperty(obj1, ‘ids‘, {
        value: 2233, // 该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认是 undefined
        configurable: true, // 是否可以删除 默认值 false
        writable: true, // 是否可进行改变重写 默认值 false
        enumerable: true // 是否可以遍历出来 默认值 false
      })
      obj1.ids = 3301
      console.log(obj1.ids)

      for (i in obj1) {
        console.info(`${i} 是 等于`, obj1[i])
      }

      delete obj1.ids
      delete obj1.work
      // 删除对象的属性
      // delete 对象名.属性
      console.log(obj1)

  

 技术分享图片

 

 

 下面来看看他的 getset

  技术分享图片

 

 

    let id = 123
      const obj1 = {
        age: 18,
        color: ‘yellow‘,
        gender: ‘male‘,
        work: ‘true‘
      }

      Object.defineProperty(obj1, ‘ids‘, {
        // Invalid property descriptor. Cannot both specify accessors and a value or writable attribute
        // value: id, // 写上报错 把它注掉 译: 无效的属性描述符。不能同时指定访问器和值或可写属性
        set(value) {
          console.log(‘set 调用‘)
          id = value
        },
        get() {
          console.log(‘get 调用‘)
          return id
        }
      })
      console.log(obj1)
      /*        
      这里使用 一个变量 id 与 这个ids属性建立关联, 当读取obj1 的ids 属性时, get()函数 <=> getter 就会调用, 且返回值就是 id 的值,
      当修改obj1 的 ids 属性时, set函数(setter) 就会被调用, 且会收到修改的具体值
       */

  技术分享图片

 下面是实现两个对象之间的数据代理

 

// 数据代理: 通过一个对象代理对另一个对象中属性的操作 (读/写)
      // invoke property getter 译: 调用属性的getter
      const obj1 = { x: 1 }
      const obj2 = { y: 2 }

      Object.defineProperty(obj2, ‘x‘, {
        get() {
          return obj1.x
        },
        set(value) {
          obj.x = value
        }
      })

  

Object.defineProperty() 方法的使用

原文:https://www.cnblogs.com/b1acklv5/p/15139371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!