Object.prototype.isPrototypeOf()

isPrototypeOf() メソッドは、オブジェクトが別のオブジェクトのプロトタイプチェーンに存在するかどうかを判定します。

isPrototypeOf() は、instanceof 演算子とは異なります。"object instanceof AFunction" 式では、object のプロトタイプチェーンは AFunction 自身ではなく、AFunction.prototype に対して判定されます。

構文

prototypeObj.isPrototypeOf(object)

引数

object
プロトタイプチェーンの検索対象。

戻り値

呼び出されたオブジェクトがプロトタイプチェーン内に指定されたオブジェクトを持つかどうかを示す Boolean

発生しうるエラー

TypeError
prototypeObj が undefined か null の場合、TypeError がスローされる。

説明

isPrototypeOf を用いると、オブジェクトが別のオブジェクト内のプロトタイプチェーンに存在するかどうかをチェックする事ができます。

この例は、baz オブジェクトのプロトタイプチェーンに、Baz.prototypeBar.prototypeFoo.prototypeObject.prototype が存在しているデモです:

function Foo() {}
function Bar() {}
function Baz() {}

Bar.prototype = Object.create(Foo.prototype);
Baz.prototype = Object.create(Bar.prototype);

var baz = new Baz();

console.log(Baz.prototype.isPrototypeOf(baz)); // true
console.log(Bar.prototype.isPrototypeOf(baz)); // true
console.log(Foo.prototype.isPrototypeOf(baz)); // true
console.log(Object.prototype.isPrototypeOf(baz)); // true

isPrototypeOf() メソッドは、instanceof 演算子と同様に、特定のプロトタイプチェーンから継承されたオブジェクトを扱うときにのみ機能するコードを持つ場合、たとえばそのオブジェクトに特定のメソッドやプロパティが存在することを保証する場合に特に便利です。

たとえば、baz オブジェクトが Foo.prototype に由来しているか検証してみます:

if (Foo.prototype.isPrototypeOf(baz)) {
  // do something safe
}

仕様

仕様 ステータス コメント
ECMAScript 3rd Edition (ECMA-262) 標準 初期定義。
ECMAScript 5.1 (ECMA-262)
Object.prototype.isPrototypeOf の定義
標準
ECMAScript 2015 (6th Edition, ECMA-262)
Object.prototype.isPrototypeOf の定義
標準
ECMAScript (ECMA-262)
Object.prototype.isPrototypeOf の定義
現行の標準

ブラウザー実装状況

Browser compatibility

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
isPrototypeOfChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 9Opera 完全対応 4Safari 完全対応 3WebView Android 完全対応 1Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 あり

凡例

完全対応  
完全対応

関連項目