JavaScript 屬性描述符

解釋了屬性描述符以及它們的用途 在 JavaScript 中,任何物件都有一組屬性,而每個屬性都有一個 描述符。 這個描述符是一個物件,它定義了屬性的行為和自身屬性。 許多 Object 靜態方法與之相互作用。這些方法包括: Object.create() Object.defineProperties() Object.defineProperty() Object.getOwnPropertyDescriptor() Object.getOwnPropertyDescriptors() 以下是一個屬性描述符物件的例子: { value: 'Something' } 這是最簡單的描述符物件。value 是屬性的值,在鍵值定義中使用。這個 key 是在物件中定義此屬性時所使用的鍵: { breed: { value: 'Siberian Husky' } } 示例: const animal = {} const dog = Object.create(animal, { breed: { value: 'Siberian Husky' } }); console.log(dog.breed) //'Siberian Husky' 您可以為每個不同的物件屬性傳遞其他屬性: value:屬性的值 writable:若為 true,則該屬性可以被更改 configurable:若為 false,則該屬性無法被移除,也無法更改任何屬性,除非它的值 enumerable:若為 true,則該屬性是可枚舉的 get:屬性的 getter 函式,在讀取屬性時呼叫 set:屬性的 setter 函式,在變更屬性值時呼叫 writable、configurable 和 enumerable 設定該屬性的行為。它們的值是布林值,默認情況下都是 false。...

Object getOwnPropertyDescriptors()方法

了解JavaScript Object对象的getOwnPropertyDescriptors()方法 此方法返回对象的所有自有(非继承)属性描述符。 Object.getOwnPropertyDescriptors(obj)接受一个对象,并返回一个提供属性描述符列表的新对象。 示例: const dog = {} Object.defineProperties(dog, { breed: { value: 'Siberian Husky' } }) Object.getOwnPropertyDescriptors(dog) /\* { breed: { value: 'Siberian Husky', writable: false, enumerable: false, configurable: false } } \*/ 有一个使用场景可以非常有用。ES2015给我们提供了Object.assign(),它可以复制一个或多个对象的所有可枚举自有属性,并返回一个新对象。但是它存在一个问题,就是它无法正确复制具有非默认属性的属性。 例如,如果一个对象只有一个setter,使用Object.assign()无法正确复制到新对象中。例如: const person1 = { set name(newName) { console.log(newName) } } 这个复制尝试将不起作用: const person2 = {} Object.assign(person2, person1) 但这个可以正常工作,并正确复制setter: const person3 = {} Object.defineProperties(person3, Object.getOwnPropertyDescriptors(person1)) 可以通过控制台测试看到: person1.name = 'x' "x" person2.name = 'x' person3.name = 'x' "x" person2不包含setter,它没有被复制过来。...