このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Reflect.setPrototypeOf()

Baseline Widely available

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

Reflect.setPrototypeOf() は静的メソッドで、Object.setPrototypeOf() と同様ですが、論理値 (Boolean) を返す点が異なります。指定されたオブジェクトのプロトタイプ(すなわち内部の [[Prototype]] プロパティ)を設定します。

試してみましょう

const object1 = {};

console.log(Reflect.setPrototypeOf(object1, Object.prototype));
// 予想される結果: true

console.log(Reflect.setPrototypeOf(object1, null));
// 予想される結果: true

const object2 = {};

console.log(Reflect.setPrototypeOf(Object.freeze(object2), null));
// 予想される結果: false

構文

js
Reflect.setPrototypeOf(target, prototype)

引数

target

プロトタイプを設定する対象のオブジェクトです。

prototype

オブジェクトの新しいプロトタイプ (オブジェクトまたは null) です。

返値

プロトタイプが正常に設定されたかどうかを示す論理値 (Boolean) です。

例外

TypeError

target がオブジェクトではない場合、または prototype がオブジェクトでも null でもない場合。

解説

Reflect.setPrototypeOf() は、オブジェクトのプロトタイプを設定する反射的な意味づけを提供します。ごく基本的なレベルでは、プロトタイプの設定は論理値を返します(プロキシハンドラーの場合と同様です)。Object.setPrototypeOf() はほぼ同じ意味づけを提供しますが、結果が false(操作が失敗した)の場合、TypeError が発生します。一方、Reflect.setPrototypeOf() は結果を直接返します。

Reflect.setPrototypeOf() は、target[[SetPrototypeOf]] オブジェクト内部メソッド を呼び出します。

Reflect.setPrototypeOf() の使用

js
Reflect.setPrototypeOf({}, Object.prototype); // true

// オブジェクトの [[Prototype]] は null に変更できる。
Reflect.setPrototypeOf({}, null); // true

// 対象が拡張できない場合、false を返す。
Reflect.setPrototypeOf(Object.freeze({}), null); // false

// プロトタイプチェーンが循環する場合、false を返す。
const target = {};
const proto = Object.create(target);
Reflect.setPrototypeOf(target, proto); // false

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-reflect.setprototypeof

ブラウザーの互換性

関連情報