MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

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 2017 Draft (ECMA-262)
Object.prototype.isPrototypeOf の定義
ドラフト  

ブラウザー実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート (有) (有) (有) (有) (有)
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート (有) (有) (有) (有) (有) (有)

関連項目

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama, teoli, ethertank, Mgjbot, Potappo, Yuichirou
 最終更新者: YuichiNukiyama,