Reflect.defineProperty()

静的な 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() の使用

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

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

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

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

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

仕様書

仕様書
ECMAScript (ECMA-262)
Reflect.defineProperty の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
definePropertyChrome 完全対応 49Edge 完全対応 12Firefox 完全対応 42IE 未対応 なしOpera 完全対応 36Safari 完全対応 10WebView Android 完全対応 49Chrome Android 完全対応 49Firefox Android 完全対応 42Opera Android 完全対応 36Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0

凡例

完全対応  
完全対応
未対応  
未対応

関連情報