Phương thức Object getOwnPropertyDescriptors ()

Tìm hiểu tất cả về phương thức JavaScript getOwnPropertyDescriptors () của đối tượng Object

Phương thức này trả về tất cả các bộ mô tả thuộc tính riêng (không kế thừa) của một đối tượng.

Object.getOwnPropertyDescriptors(obj)chấp nhận một đối tượng và trả về một đối tượng mới cung cấp danh sách các bộ mô tả.

Thí dụ:

const dog = {}
Object.defineProperties(dog, {
  breed: {
    value: 'Siberian Husky'
  }
})
Object.getOwnPropertyDescriptors(dog)
/*
{
  breed: {
    value: 'Siberian Husky',
    writable: false,
    enumerable: false,
    configurable: false
  }
}
*/

Có một trường hợp sử dụng làm cho thuộc tính này rất hữu ích. ES2015 đã cho chúng tôiObject.assign(), sao chép tất cả các thuộc tính có thể liệt kê từ một hoặc nhiều đối tượng và trả về một đối tượng mới. Tuy nhiên, có một vấn đề với điều đó, bởi vì nó không sao chép chính xác các thuộc tính với các thuộc tính không phải mặc định.

Nếu một đối tượng chẳng hạn chỉ có một bộ định vị, nó không được sao chép chính xác sang một đối tượng mới, bằng cách sử dụngObject.assign(). Ví dụ với đối tượng này:

const person1 = {
  set name(newName) {
    console.log(newName)
  }
}

Nỗ lực sao chép này sẽ không hoạt động:

const person2 = {}
Object.assign(person2, person1)

Nhưng điều này sẽ hoạt động và sao chép qua trình thiết lập một cách chính xác:

const person3 = {}
Object.defineProperties(person3,
  Object.getOwnPropertyDescriptors(person1))

Như bạn có thể thấy khi kiểm tra bảng điều khiển:

person1.name = 'x'
"x"

person2.name = ‘x’

person3.name = ‘x’ “x”

person2bỏ lỡ setter, nó không được sao chép qua.

Hạn chế tương tự cũng xảy ra đối với các đối tượng nhân bản nông vớiObject.create().

Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript


Các hướng dẫn js khác: