jinzhe

jinzhe

github
email

javascript中对象的属性配置

数据属性描述符#

  • value:值
  • writable:值是否可改写
  • enumerable:是否可枚举(forinObject.keys()
  • configurable:是否可配置(deletedefineProperty 是否可以设置成功)

note
属性描述符在单个属性的级别上工作。

Object.getOwnPropertyDescriptor#

获取数据属性的描述符。

const user = {
  name: 'z',
  age: 23
}

const config = Object.getOwnPropertyDescriptor(user, 'name')

console.log(config)
// { value: 'z', writable: true, enumerable: true, configurable: true }

Object.defineProperty#

设置数据属性的描述符。

const user = {
  name: 'z',
  age: 23
}

Object.defineProperty(user, 'name', {
  writable: false,
  enumerable: false,
  configurable: false
})

Object.defineProperties#

一次性设置对象多个数据属性的描述符。

const user = {
  name: 'z',
  age: 23
}

Object.defineProperties(user, {
  name: {
    writable: false,
    enumerable: false,
    configurable: false
  },
  age:{
    writable: false,
    enumerable: false,
    configurable: false
  }
})

Object.getOwnPropertyDescriptors#

一次性获取所有数据属性描述符。

const user = {
  name: 'z',
  age: 23
}

const config = Object.getOwnPropertyDescriptors(user)
console.log(config)
// {
//    name: { value: 'z', writable: true, enumerable: true, configurable: true },
//    age: { value: 23, writable: true, enumerable: true, configurable: true }
//}

设定一个全局的密封对象#

Object.seal(obj)#

禁止添加 / 删除属性。为所有现有的属性设置 configurable: false

Object.freeze(obj)#

禁止添加 / 删除 / 更改属性。为所有现有的属性设置 configurable: false, writable: false

访问器属性#

本质上是用于获取和设置值的函数,但从外部代码来看就像常规属性。

let obj = {
  get propName() {
    // 当读取 obj.propName 时,getter 起作用
  },

  set propName(value) {
    // 当执行 obj.propName = value 操作时,setter 起作用
  }
};

getter 和 setter#

访问器属性由 “getter” 和 “setter” 方法表示。在对象字面量中,它们用 getset 表示:

let user = {
  name: "John",
  surname: "Smith",

  get fullName() {
    return `${this.name} ${this.surname}`;
  },

  set fullName(value) {
    [this.name, this.surname] = value.split(" ");
  }
};

// set fullName 将以给定值执行
user.fullName = "Alice Cooper";

console.log(user.fullName) // Alice Cooper
console.log(user.name); // Alice
console.log(user.surname); // Cooper

访问器描述符#

  • get: 一个没有参数的函数,在读取属性时工作
  • set: 一个带有单个参数的函数,当写入属性时工作
  • enumerable:与数据属性的相同,
  • configurable: 与数据属性的相同,
let user = {
  name: "John",
  surname: "Smith"
};

Object.defineProperty(user, 'fullName', {
  get() {
    return `${this.name} ${this.surname}`;
  },
  enumerable: true,
  set(value) {
    [this.name, this.surname] = value.split(" ");
  }
});

console.log(user.fullName); // John Smith

for(let key in user) console.log(key); // name, surname, fullName
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。