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 legt das Standardverfahren fest, 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 geben immer
falsezurück.
Rückgabewert
true, wenn func.prototype in der Prototypenkette von value enthalten ist; andernfalls false. Gibt immer false zurück, wenn value kein Objekt ist oder this keine Funktion ist. Wenn this eine gebundene Funktion ist, gibt es das Ergebnis eines instanceof-Tests auf value und die zugrundeliegende Ziel-Funktion 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, wann immer eine solche Methode existiert. Da alle Funktionen standardmäßig von Function.prototype erben, haben sie alle die [Symbol.hasInstance]()-Methode, sodass die Methode Function.prototype[Symbol.hasInstance]() meistens das Verhalten von instanceof definiert, wenn die rechte Seite eine Funktion ist. Diese Methode implementiert das Standardverhalten des instanceof-Operators (der gleiche Algorithmus, wenn constructor keine [Symbol.hasInstance]()-Methode hat).
Im Gegensatz zu den meisten Methoden ist die Eigenschaft Function.prototype[Symbol.hasInstance]() nicht konfigurierbar und nicht beschreibbar. Dies ist ein Sicherheitsmerkmal, um zu verhindern, dass die zugrundeliegende Ziel-Funktion einer gebundenen Funktion erlangt werden kann. Siehe diese Antwort auf Stack Overflow für ein Beispiel.
Beispiele
Zurücksetzen auf das Standardverhalten von instanceof
Sie müssten diese Methode selten direkt aufrufen. Stattdessen wird diese Methode vom instanceof-Operator aufgerufen. Sie sollten erwarten, dass die beiden Ergebnisse in der Regel gleichwertig sind.
class Foo {}
const foo = new Foo();
console.log(foo instanceof Foo === Foo[Symbol.hasInstance](foo)); // true
Sie könnten diese Methode verwenden wollen, wenn Sie das Standardverhalten von instanceof aufrufen möchten, aber nicht wissen, ob ein Konstruktor eine überschreibende [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% |