Object扩展 (Object Extension)

ES5给Object扩展了一些静态方法,常用的有2个:
1、Object.create(prototype,[description])
作用:以指定对象为原型创建新的对象。
为新的对象指定新的属性,并对属性进行描述。
-value:指定值。
-writable:标识当前属性值是否是可修改的,默认中false。
-configurable:标识当前属性是否可以被删除,默认是fasle。
-enumerable:标识当前属性是否能用for in 枚举 默认为false。

  const person = { username: 'Lily', age: '18' }
    let obj = {}

    obj = Object.create(person, {
      sex: {
        value: '男',
        writable: true,
        enumerable: true,
        configurable: true,
      }
    })

    obj.sex = '女'
    // delete obj.sex
    console.log(obj)
    for (let object in obj) {
      console.log(object)
    }
Object扩展 (Object Extension)_第1张图片
******

2、Object.defineProperties(object,description)
作用:为指定对象定义扩展多个属性。
-get:用来获取当前属性值的回调函数。
-set:修改当前属性值的触发函数,并且实参即为修改后的值。
-存储器属性:setter,getter一个用来存值,一个用来取值。

 let names = { firstName: 'Lily', lastName: 'Jack' }
  Object.defineProperties(names, {
    fullName: {
      get: function () {
        console.log('get()')
        return `${this.firstName}  ${this.lastName}`
      },
      set: function (data) {
        console.log('set()')
        let names = data.split(' ')
        this.firstName = names[0]
        this.lastName = names[1]
      }
    }
  })

  names.fullName = 'Luck Bull'
  console.log(names.fullName)
  console.log(names)

Object扩展 (Object Extension)_第2张图片
******

3、对象本身的get set 方法
get propertyName() 用来得到当前属性值的回调函数
set propertyName() 用来监视当前属性值变化的回调函数

 let user = {
      firstName: 'curry',
      lastName: 'stephen',
      get fullName () {
        return `${this.firstName}   ${this.lastName}`
      },
      set fullName (data) {
        let users = data.split(' ')
        this.firstName = users[0]
        this.lastName = users[1]
      }
    }

  console.log(user.fullName)
  user.fullName = 'Luily Luck'
  console.log(user.fullName)
Object扩展 (Object Extension)_第3张图片
******

你可能感兴趣的:(Object扩展 (Object Extension))