JavaScript

Object.prototype.isPrototypeOf()メソッド

 編集:2022.07.28 by T.A.

オブジェクトが別のオブジェクトのプロトタイプ チェーンに存在するかどうかを判定します。

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

prototypeObj.isPrototypeOf(object)
prototypeObj 調べられるプロトタイプ オブジェクト。
object プロトタイプ チェーンの検索対象。
戻り値

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

発生するエラー
TypeError
prototypeObj が undefined か null の場合、TypeError 発生する。
解説

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

isPrototypeOf の使用

この例は、baz オブジェクトのプロトタイプチェーンに、Baz.prototype と Bar.prototype、Foo.prototype、Object.prototype が存在しているデモです。

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

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

var baz = new Baz();

D=Baz.prototype.isPrototypeOf(baz);	//=true
D=Bar.prototype.isPrototypeOf(baz);	//=true
D=Foo.prototype.isPrototypeOf(baz);	//=true
D=Object.prototype.isPrototypeOf(baz);	//=true

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

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

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

テスト