Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Object.prototype.isPrototypeOf()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
DieisPrototypeOf() Methode vonObject Instanzen prüft, ob dieses Objekt in der Prototypenkette eines anderen Objekts existiert.
Hinweis:isPrototypeOf() unterscheidet sich vominstanceof Operator. Im Ausdruckobject instanceof AFunction wird die Prototypenkette vonobject gegenAFunction.prototype geprüft, nicht gegenAFunction selbst.
In diesem Artikel
Probieren Sie es aus
function Foo() {}function Bar() {}Bar.prototype = Object.create(Foo.prototype);const bar = new Bar();console.log(Foo.prototype.isPrototypeOf(bar));// Expected output: trueconsole.log(Bar.prototype.isPrototypeOf(bar));// Expected output: trueSyntax
isPrototypeOf(object)Parameter
objectDas Objekt, dessen Prototypenkette durchsucht wird.
Rückgabewert
Ein Boolean, der angibt, ob das aufrufende Objekt (this) in der Prototypenkette vonobject liegt. Gibt direktfalse zurück, wennobject kein Objekt ist (d.h. ein primitiver Wert).
Ausnahmen
TypeErrorWird ausgelöst, wenn
thisnulloderundefinedist (weil es nichtin ein Objekt konvertiert werden kann).
Beschreibung
Alle Objekte, die vonObject.prototype erben (das heißt alle außernull-Prototyp Objekten), erben dieisPrototypeOf() Methode. Diese Methode ermöglicht es Ihnen, zu überprüfen, ob das Objekt innerhalb der Prototypenkette eines anderen Objekts existiert. Wenn das als Parameter übergebeneobject kein Objekt ist (d.h. ein primitiver Wert), gibt die Methode direktfalse zurück. Andernfalls wird derthis-Wertin ein Objekt konvertiert, und die Prototypenkette vonobject wird nach demthis-Wert durchsucht, bis das Ende der Kette erreicht oder derthis-Wert gefunden wird.
Beispiele
>Verwendung von isPrototypeOf()
Dieses Beispiel zeigt, dassBaz.prototype,Bar.prototype,Foo.prototype undObject.prototype in der Prototypenkette für das Objektbaz existieren:
class Foo {}class Bar extends Foo {}class Baz extends Bar {}const foo = new Foo();const bar = new Bar();const baz = new Baz();// prototype chains:// foo: Foo --> Object// bar: Bar --> Foo --> Object// baz: Baz --> Bar --> Foo --> Objectconsole.log(Baz.prototype.isPrototypeOf(baz)); // trueconsole.log(Baz.prototype.isPrototypeOf(bar)); // falseconsole.log(Baz.prototype.isPrototypeOf(foo)); // falseconsole.log(Bar.prototype.isPrototypeOf(baz)); // trueconsole.log(Bar.prototype.isPrototypeOf(foo)); // falseconsole.log(Foo.prototype.isPrototypeOf(baz)); // trueconsole.log(Foo.prototype.isPrototypeOf(bar)); // trueconsole.log(Object.prototype.isPrototypeOf(baz)); // trueDieisPrototypeOf() Methode — zusammen mit deminstanceof Operator — ist besonders nützlich, wenn Sie Code haben, der nur mit Objekten funktioniert, die von einer bestimmten Prototypenkette abstammen; z. B. um sicherzustellen, dass bestimmte Methoden oder Eigenschaften auf diesem Objekt vorhanden sind.
Zum Beispiel, um Code auszuführen, der nur sicher ist, wenn einbaz ObjektFoo.prototype in seiner Prototypenkette hat, können Sie folgendes tun:
if (Foo.prototype.isPrototypeOf(baz)) { // do something safe}Allerdings impliziert die Existenz vonFoo.prototype inbaz's Prototypenkette nicht, dassbaz mitFoo als Konstruktor erstellt wurde. Zum Beispiel könntebaz direkt mitFoo.prototype als sein Prototyp zugewiesen worden sein. In diesem Fall würde Ihr Code beim Lesenprivater Felder vonFoo vonbaz dennoch fehlschlagen:
class Foo { #value = "foo"; static getValue(x) { return x.#value; }}const baz = { __proto__: Foo.prototype };if (Foo.prototype.isPrototypeOf(baz)) { console.log(Foo.getValue(baz)); // TypeError: Cannot read private member #value from an object whose class did not declare it}Das Gleiche gilt fürinstanceof. Wenn Sie private Felder auf sichere Weise lesen müssen, bieten Sie stattdessen eine markengeprüfte Methode mitin an.
class Foo { #value = "foo"; static getValue(x) { return x.#value; } static isFoo(x) { return #value in x; }}const baz = { __proto__: Foo.prototype };if (Foo.isFoo(baz)) { // Doesn't run, because baz is not a Foo console.log(Foo.getValue(baz));}Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.prototype.isprototypeof> |