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

View in English Always switch to English

Reflect.getPrototypeOf()

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.getPrototypeOf() は静的メソッドで、Object.getPrototypeOf() とほぼ同じメソッドです。これは指定したオブジェクトのプロトタイプを返します。

試してみましょう

const object = {
  foo: 42,
};

const proto = Reflect.getPrototypeOf(object);

console.log(proto);
// 予想される結果: Object {  }

console.log(Reflect.getPrototypeOf(proto));
// 予想される結果: null

構文

js
Reflect.getPrototypeOf(target)

引数

target

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

返値

与えられたオブジェクトのプロトタイプです。継承されたプロパティがない場合、null を返します。

例外

TypeError

target がオブジェクトではない場合に発生します。

解説

Reflect.getPrototypeOf() は、オブジェクトのプロトタイプを取得する反射的意味づけを提供します。Object.getPrototypeOf() との唯一の違いは、オブジェクト以外の対象を処理する方法です。Reflect.getPrototypeOf() は対象がオブジェクトでない場合に TypeError を発生しますが、Object.getPrototypeOf() はオブジェクトに変換します。

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

Reflect.getPrototypeOf() の使用

js
Reflect.getPrototypeOf({}); // Object.prototype
Reflect.getPrototypeOf(Object.prototype); // null
Reflect.getPrototypeOf(Object.create(null)); // null

Object.getPrototypeOf() との比較

js
// Object の結果は同じ
Object.getPrototypeOf({}); // Object.prototype
Reflect.getPrototypeOf({}); // Object.prototype

// ES5 上では非Objectの結果は両方とも例外
Object.getPrototypeOf("foo"); // Throws TypeError
Reflect.getPrototypeOf("foo"); // Throws TypeError

// ES2015 上では Reflect のみ例外で、Object は 非Object を Object として扱う
Object.getPrototypeOf("foo"); // String.prototype
Reflect.getPrototypeOf("foo"); // Throws TypeError

// Object ES2015 の動作を模倣するには、型変換が必要
Reflect.getPrototypeOf(Object("foo")); // String.prototype

仕様書

Specification
ECMAScript® 2027 Language Specification
# sec-reflect.getprototypeof

ブラウザーの互換性

関連情報