Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
isPrototypeOf() は Object インスタンスのメソッドで、オブジェクトが別のオブジェクトのプロトタイプチェーンに存在するかどうかを判定します。
メモ: isPrototypeOf() は、 instanceof 演算子とは異なります。 object instanceof AFunction という式では、object のプロトタイプチェーンは AFunction 自身ではなく、AFunction.prototype に対して判定されます。
プロトタイプチェーンの検索対象。
論理値で、呼び出されるオブジェクト (this) が object のプロトタイプチェーンにあるかどうかを示します。オブジェクト this がオブジェクトでない(プリミティブである)場合は false を返します。
this が null または undefined の場合に発生します(オブジェクトに変換できないため)。
Object.prototype を継承するすべてのオブジェクト(つまり、 null プロトタイプオブジェクトを除くすべて)は、 isPrototypeOf() メソッドを継承します。このメソッドによって、オブジェクトが他のオブジェクトのプロトタイプチェーンの中に存在するかどうかを調べることができます。引数として渡された object がオブジェクトでない(つまりプリミティブである)場合、このメソッドは直接 false を返します。そうでない場合、 this 値はオブジェクトに変換され、 object のプロトタイプチェーンを、チェーンの終端に達するか、 this 値が見つかるまで探します。
この例は、baz オブジェクトのプロトタイプチェーンに、Baz.prototype と Bar.prototype、Foo.prototype、Object.prototype が存在しているデモです。
isPrototypeOf() メソッドは、instanceof 演算子と同様に、特定のプロトタイプチェーンから継承されたオブジェクトを扱うときにのみ機能するコードを持つ場合、たとえばそのオブジェクトに特定のメソッドやプロパティが存在することを保証する場合に特に便利です。
たとえば、baz オブジェクトが Foo.prototype に由来しているか検証してみます。
しかし、 Foo.prototype が baz のプロトタイプチェーンに存在したからといって、 baz が Foo をコンストラクターとして使用して作成されたとは限りません。例えば、 baz が Foo.prototype をプロトタイプとして直接割り当てることもできます。この場合、コードが baz から Foo のプライベートフィールドを読み込んでも、失敗します。
instanceof も同様です。プライベートフィールドを安全な方法で読み取る必要がある場合は、代わりに in を使用してブランデッドチェックメソッドを提供してください。
| ECMAScript® 2027 Language Specification # sec-object.prototype.isprototypeof |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年8月26日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.