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
statische Daten-Eigenschaft repräsentiert das bekannte Symbol Symbol.hasInstance
. Der instanceof
Operator sucht dieses Symbol auf seinem rechten Operanden für die Methode, die verwendet wird, um festzustellen, ob das Konstruktor-Objekt ein Objekt als seine Instanz erkennt.
Probieren Sie es aus
class Array1 {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance);
}
}
console.log([] instanceof Array1);
// Expected output: true
Wert
Das bekannte Symbol Symbol.hasInstance
.
Eigenschaften von Symbol.hasInstance | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
Beschreibung
Der Operator instanceof
verwendet den folgenden Algorithmus, um den Rückgabewert von object instanceof constructor
zu berechnen:
- Wenn
constructor
eine[Symbol.hasInstance]()
Methode hat, dann rufen Sie diese mitobject
als erstem Argument auf und geben das Ergebnis zurück, umgewandelt in einen Boolean. Werfen Sie einenTypeError
, wennconstructor
kein Objekt ist oder wennconstructor[Symbol.hasInstance]
wedernull
,undefined
noch eine Funktion ist. - Andernfalls, wenn
constructor
keine[Symbol.hasInstance]()
Methode hat (constructor[Symbol.hasInstance]
istnull
oderundefined
), dann bestimmen Sie das Ergebnis mit demselben Algorithmus wieFunction.prototype[Symbol.hasInstance]()
. Werfen Sie einenTypeError
, wennconstructor
keine Funktion ist.
Da alle Funktionen standardmäßig von Function.prototype
erben, gibt die Methode Function.prototype[Symbol.hasInstance]()
meistens das Verhalten von instanceof
an, wenn die rechte Seite eine Funktion ist.
Beispiele
Benutzerdefiniertes instanceof-Verhalten
Sie könnten Ihr benutzerdefiniertes instanceof
-Verhalten zum Beispiel so implementieren:
class MyArray {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance);
}
}
console.log([] instanceof MyArray); // true
function MyArray() {}
Object.defineProperty(MyArray, Symbol.hasInstance, {
value(instance) {
return Array.isArray(instance);
},
});
console.log([] instanceof MyArray); // true
Überprüfen der Instanz eines Objekts
Auf die gleiche Weise, wie Sie überprüfen können, ob ein Objekt eine Instanz einer Klasse ist, indem Sie das instanceof
Schlüsselwort verwenden, können wir auch Symbol.hasInstance
für solche Überprüfungen verwenden.
class Animal {
constructor() {}
}
const cat = new Animal();
console.log(Animal[Symbol.hasInstance](cat)); // true
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-symbol.hasinstance |