Function.prototype[Symbol.hasInstance]()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.
Die [Symbol.hasInstance]() Methode von Function Instanzen gibt das Standardverfahren an, um zu bestimmen, ob eine Konstruktorfunktion ein Objekt als eine ihrer Instanzen erkennt. Sie wird vom instanceof Operator aufgerufen.
Syntax
func[Symbol.hasInstance](value)
Parameter
value-
Das zu testende Objekt. Primitive Werte liefern immer
falsezurück.
Rückgabewert
true, wenn func.prototype in der Prototypkette von value ist; andernfalls false. Gibt immer false zurück, wenn value kein Objekt ist oder this keine Funktion ist. Wenn this eine gebundene Funktion ist, liefert es das Ergebnis eines instanceof-Tests auf value und die zugrunde liegende Zielfunktion zurück.
Ausnahmen
TypeError-
Wird ausgelöst, wenn
thiskeine gebundene Funktion ist undthis.prototypekein Objekt ist.
Beschreibung
Der instanceof Operator ruft die [Symbol.hasInstance]() Methode der rechten Seite auf, wenn solch eine Methode existiert. Da alle Funktionen standardmäßig von Function.prototype erben, haben sie alle die [Symbol.hasInstance]() Methode, sodass meistens die Function.prototype[Symbol.hasInstance]() Methode das Verhalten von instanceof spezifiziert, wenn die rechte Seite eine Funktion ist. Diese Methode implementiert das Standardverhalten des instanceof Operators (den gleichen Algorithmus, wenn constructor keine [Symbol.hasInstance]() Methode hat).
Im Gegensatz zu den meisten Methoden ist die Function.prototype[Symbol.hasInstance]() Eigenschaft nicht konfigurierbar und nicht beschreibbar. Dies ist ein Sicherheitsmerkmal, um zu verhindern, dass die zugrunde liegende Zielfunktion einer gebundenen Funktion verfügbar gemacht wird. Siehe diese Antwort auf Stack Overflow für ein Beispiel.
Beispiele
>Rückkehr zum Standardverhalten von instanceof
Es würde selten erforderlich sein, diese Methode direkt aufzurufen. Stattdessen wird diese Methode vom instanceof Operator aufgerufen. Sie sollten erwarten, dass die beiden Ergebnisse normalerweise gleichwertig sind.
class Foo {}
const foo = new Foo();
console.log(foo instanceof Foo === Foo[Symbol.hasInstance](foo)); // true
Möglicherweise möchten Sie diese Methode verwenden, wenn Sie das Standardverhalten von instanceof aufrufen möchten, aber nicht wissen, ob ein Konstruktor eine überschriebene [Symbol.hasInstance]() Methode hat.
class Foo {
static [Symbol.hasInstance](value) {
// A custom implementation
return false;
}
}
const foo = new Foo();
console.log(foo instanceof Foo); // false
console.log(Function.prototype[Symbol.hasInstance].call(Foo, foo)); // true
Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-function.prototype-%symbol.hasinstance%> |
Browser-Kompatibilität
Loading…