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> |