LoginSignup
0
0

More than 1 year has passed since last update.

【JS】ディスクリプタを最低限の理解まで持っていく

Posted at

はじめに

まず、ディスクリプタって聞いたことありますか??
自分は初めて聞く単語で今も戸惑っています。。w
用語の理解と実際の使い方などを最低限のレベルまで持って行けたら良いなと思います!

ディスクリプタとは

オブジェクトプロパティには、キーバリューストア(key-value)のイメージがあると思いますが、もっと柔軟で強力なものです。ディスクリプタとは、プロパティを細かく制御することが可能で、その制御モードを指示するオブジェクトのことです。
Object.defineProperty(オブジェクト, "属性", { ディスクリプタ }のように設定できる。

// オブジェクトを生成
let obj = {}

// 生成したオブジェクトにnameプロパティを設定する
Object.defineProperty(obj, "name", {
  value: 'tanaka', // 実際に持つ値      
  writable: false // 値の変更可能性
  enumerable: false, // 列挙可能性
  configurable: false, // 設定変更可能性
}

// 以下のようにすることで全てtrueで設定されます
let user = { name: "tanaka" };

ゲッターとセッター

値を取得するときや、変更するときの処理をカスタマイズしたい時は、ゲッター(getter)とセッター(setter)を設定します。

class Person {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }

  // name属性のgetterを設定
  get name() {
    return this._name;
  }

  // name属性のsetterを設定
  set name(val) {
    this._name = val;
  }
}

使い所は?

  • 値の取得や更新の際に、任意の処理を実行したいとき
    • 更新したと同時に他の値も同時に更新したいときなど

静的メソッドの設定

クラス内で使用する静的メソッドを使用する際には、staticを使用します。これは、インスタンス化せずに使用する事が出来ます。
※thisは使用できません

class Person {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }
.
.
.
  // 静的メソッドhelloを定義
  static hello() {
    console.log('hello')
  }
}

Person.hello() // => 'hello'

終わりに

少しだけでもお力添えできたら幸いです。。

参考

JavaScriptのディスクリプタを使い、堅牢なオブジェクトやObservableなオブジェクトを作る

JavaScriptのGetter Setterを理解する(入門者向け)

プロパティフラグとディスクリプタ

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