Reflect.defineProperty()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

静的な Reflect.defineProperty() メソッドは、Object.defineProperty() と似ていますが、 Boolean を返します。

試してみましょう

構文

Reflect.defineProperty(target, propertyKey, attributes)

引数

target

プロパティを定義する対象のオブジェクトです。

propertyKey

定義または修正をするプロパティ名です。

attributes

定義または修正されているプロパティのための属性です。

返値

プロパティの定義に成功したかどうかを示す Boolean です。

例外

TypeError: targetObject ではなかった場合。

解説

Reflect.defineProperty メソッドは、オブジェクトのプロパティの正確な追加や修正を行います。詳細は、類似メソッドの Object.defineProperty を参照してください。

メモ: Object.defineProperty はプロパティの定義が成功しなかった場合、オブジェクトを返すか TypeError を発生させます。しかし、Reflect.defineProperty は単純に、プロパティの定義が成功したかどうかを示す Boolean を返します。

Reflect.defineProperty() の使用

js
let obj = {};
Reflect.defineProperty(obj, "x", { value: 7 }); // true
obj.x; // 7

プロパティ定義が成功したかチェックする

成功してオブジェクトを返すか、失敗して TypeError をスローする Object.defineProperty を使う場合、プロパティの定義中に発生する何らかの例外をキャッチするには、try...catch ブロックを使用します。

Reflect.defineProperty は真偽値の成功ステータスを返すので、if...else ブロックを使用することができます。

js
if (Reflect.defineProperty(target, property, attributes)) {
  // success
} else {
  // failure
}

仕様書

Specification
ECMAScript Language Specification
# sec-reflect.defineproperty

ブラウザーの互換性

BCD tables only load in the browser

関連情報