オブジェクトgetOwnPropertyDescriptors()メソッド

ObjectオブジェクトのJavaScriptgetOwnPropertyDescriptors()メソッドに関するすべてをご覧ください

このメソッドは、オブジェクトのすべての独自の(継承されていない)プロパティ記述子を返します。

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
  }
}
*/

このプロパティを非常に便利にするユースケースが1つあります。 ES2015は私たちに与えましたObject.assign()、1つ以上のオブジェクトから列挙可能なすべての独自のプロパティをコピーし、新しいオブジェクトを返します。ただし、デフォルト以外の属性を持つプロパティを正しくコピーしないため、問題があります。

たとえば、オブジェクトにセッターしかない場合、を使用して新しいオブジェクトに正しくコピーされません。Object.assign()。たとえば、このオブジェクトの場合:

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

このコピーの試みは機能しません:

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

しかし、これは機能し、セッターを正しくコピーします。

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

コンソールテストでわかるように:

person1.name = 'x'
"x"

person2.name = ‘x’

person3.name = ‘x’ “x”

person2セッターを逃し、コピーされませんでした。

同じ制限が、次のような浅いクローンオブジェクトにも当てはまります。Object.create()

私の無料ダウンロードJavaScriptビギナーズハンドブック


その他のjsチュートリアル: