【JavaScript】Object.defineProperties()メソッド

JavaScriptのObject.defineProperties()メソッドは、新しいまたは既存のオブジェクトに複数のプロパティを一度に定義するための方法を提供します。このメソッドは、オブジェクトのプロパティに対して細かい制御を行うことができ、特にgetterやsetterを定義する際に便利です。この記事では、Object.defineProperties()メソッドの基本的な使い方や機能、そして実際の使用例について詳しく説明します。

目次

JavaScriptのObject.defineProperties()メソッド:オブジェクトの複数のプロパティを定義する

Object.defineProperties()メソッドの構文

Object.defineProperties()メソッドの構文は以下の通りです。

Object.defineProperties(obj, props)
  • obj: プロパティを定義する対象のオブジェクトです。
  • props: 定義するプロパティのディスクリプタを持つオブジェクトです。各プロパティ名は定義するプロパティの名前、各プロパティの値はそのプロパティのディスクリプタです。

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

プロパティディスクリプタは、以下のプロパティを持つオブジェクトです。

  • value: プロパティの値を指定します。
  • writable: プロパティが書き込み可能かどうかを示す真偽値です。
  • enumerable: プロパティが列挙可能かどうかを示す真偽値です。
  • configurable: プロパティの設定変更や削除が可能かどうかを示す真偽値です。

Object.defineProperties()メソッドの動作

Object.defineProperties()メソッドは、指定されたオブジェクトに新しいプロパティを定義します。各プロパティは、それぞれのプロパティディスクリプタに基づいて設定されます。

const obj = {};

Object.defineProperties(obj, {
  property1: {
    value: 42,
    writable: true
  },
  property2: {
    value: "Hello",
    writable: false
  }
});

console.log(obj.property1); // 42
console.log(obj.property2); // Hello

Object.defineProperties()メソッドの利点

  1. 複数のプロパティの定義: 一度に複数のプロパティを定義することができます。
  2. 細かい制御: 各プロパティに対して、値や書き込み可能性、列挙可能性、設定可能性などの細かい制御が可能です。

Object.defineProperties()メソッドの使用例

  1. getterとsetterの定義:
const obj = {};

Object.defineProperties(obj, {
  name: {
    get() {
      return this._name;
    },
    set(value) {
      this._name = value.trim();
    },
    enumerable: true
  }
});

obj.name = "   Alice   ";
console.log(obj.name); // Alice
  1. プロパティの書き込みを禁止:
const obj = {};

Object.defineProperties(obj, {
  readOnlyProperty: {
    value: "This property cannot be changed",
    writable: false
  }
});

obj.readOnlyProperty = "Trying to change"; // TypeError: Cannot assign to read only property 'readOnlyProperty' of object

結論

Object.defineProperties()メソッドは、オブジェクトに複数のプロパティを定義するための強力な方法を提供します。このメソッドを使用することで、プロパティの値や挙動を細かく制御することができ、柔軟で再利用可能なコードを作成することができます。

目次