什么是 JavaScript 属性描述符

属性描述符

What are JavaScript Property Descriptors

属性描述符是一个对象,用于在另一个对象上配置另一个属性。

配置选项直接影响我们使用对象属性的方式。我们可以配置的一些选项是:

  • writable – 与属性关联的值是否可以更改
  • 可枚举 – 此属性是否出现在for ...in循环中
  • value – 当前值
  • configurable – 属性是否可以删除,以及描述符的属性(值和可写除外)是否可以更改。

让我们看一个例子:

const employee = { name: 'Tom', salary: 5000, }; // {value: 'Tom', writable: true, enumerable: true, configurable: true} console.log(Object.getOwnPropertyDescriptor(employee, 'name'));

要更改属性描述符,我们可以使用Object.defineProperty

// set the value associated with `name` as readonly Object.defineProperty(employee, 'name', {writable: false}); employee.name = 'Jim'; // {name: 'Tom', salary: 5000} console.log(employee);

在上面的示例中,我们可以看到通过将描述符编辑为不可写,值变为只读。

我们还可以使用value配置选项来更新关联值:

Object.defineProperty(employee, 'salary', {value: 10000}); // {name: 'Tom', salary: 10000} console.log(employee);

我们可以为对象中尚不存在的属性设置配置选项:

Object.defineProperty(employee, 'age', {value: 50}); // {name: 'Tom', salary: 10000, age: 50} console.log(employee); // {value: 50, writable: false, enumerable: false, configurable: false} console.log(Object.getOwnPropertyDescriptor(employee, 'age'));

属性描述符选项的默认值是false,当创建时使用Object.defineProperty,而不是true当对象只是内联时 – {key: 'value'}

我们还可以禁用从对象中删除属性的能力:

Object.defineProperty(employee, 'title', { value: 'programmer', configurable: false, }); // {name: 'Tom', salary: 10000, age: 50, title: 'programmer'} console.log(employee); delete employee['title']; // {name: 'Tom', salary: 10000, age: 50, title: 'programmer'} console.log(employee);

摘要

属性描述符只是一个对象,它包含另一个对象的属性的配置选项。我们可以将特定属性设置为只读,防止它们被删除,更新它们的值,并将它们排除在
for..in循环之外。

发表评论