0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【javascript】プロパティーとディスクリプター

Posted at

プロパティーとディスクリプター

オブジェクトのプロパティにはvalueを設定するが、内部的に設定値が設定されている。その設定を変更するのがディスクリプター

ディスクリプターの種類

  • ディスクリプター
    • value(バリュー):値の設定
    • configurable(コンフィグラブル):設定変更可能性
    • enumerable(エニュメレイタブル):列挙可能性(ループなどの時にプロパティが参照されるかどうか)
    • writable(ライタブル):値の変更可能性

case1

ディスクリプターを確認する。

  • propというプロパティを用意
  • ディスクリプターを確認するgetOwnPropertyDescriptor(第一引数:対象オブジェクト, 第二引数:対象プロパティ名)を用意。
const obj = {prop: 0}

const descriptor = Object.getOwnPropertyDescriptor(obj, 'prop')
console.log(descriptor)

初期値は全てtrueとなっている。
スクリーンショット 2021-11-19 16.28.35.png

case2

definePropertyメソッドを使い、ディスクリプターの設定を変更する。

  • defineProperty(第一引数:対象オブジェクト, 第二引数:プロパティ名, 第三引数:{ プロパティ設定項目 })
const obj = {}

Object.defineProperty( obj, 'prop', {
    value: 0
})
const descriptor = Object.getOwnPropertyDescriptor(obj, 'prop')
console.log(descriptor)

definePropertyで設定すると初期値は全てfalseとなる。

スクリーンショット 2021-11-19 16.33.21.png

現在writableがfalseなので、valueの上書きはできない。

Object.defineProperty( obj, 'prop', {
    value: 0
})

obj.prop = 1

const descriptor = Object.getOwnPropertyDescriptor(obj, 'prop')
console.log(descriptor)

スクリーンショット 2021-11-19 16.40.39.png

writable: trueに変更してみる。

Object.defineProperty( obj, 'prop', {
    value: 0
    writable: true
})

obj.prop = 1

const descriptor = Object.getOwnPropertyDescriptor(obj, 'prop')
console.log(descriptor)

変更できている。
スクリーンショット 2021-11-19 16.42.06.png

その他、enumerableの変更をするときは,configurable(コンフィグラブル):設定変更可能性をtrueとする必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?