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 Dateneigenschaft repräsentiert das wohlbekannte Symbol Symbol.hasInstance
. Der instanceof
Operator sucht dieses Symbol auf seinem rechten Operanden, um die Methode zu ermitteln, die verwendet wird, um festzustellen, ob das Konstruktorobjekt 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 wohlbekannte Symbol Symbol.hasInstance
.
Eigenschaften von Symbol.hasInstance | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
Beschreibung
Der instanceof
Operator verwendet den folgenden Algorithmus, um den Rückgabewert von object instanceof constructor
zu berechnen:
- Falls
constructor
eine[Symbol.hasInstance]()
Methode hat, wird diese mitobject
als erstem Argument aufgerufen und das Ergebnis zurückgegeben, zu einem Boolean umgewandelt. EinTypeError
wird ausgelöst, 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
), wird das Ergebnis unter Verwendung des gleichen Algorithmus wie beiFunction.prototype[Symbol.hasInstance]()
bestimmt. EinTypeError
wird ausgelöst, wennconstructor
keine Funktion ist.
Da alle Funktionen standardmäßig von Function.prototype
erben, legt in den meisten Fällen die Methode Function.prototype[Symbol.hasInstance]()
das Verhalten von instanceof
fest, wenn die rechte Seite eine Funktion ist.
Beispiele
Benutzerdefiniertes instanceof Verhalten
Sie könnten Ihr benutzerdefiniertes instanceof
Verhalten wie folgt 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
Genauso wie Sie überprüfen können, ob ein Objekt eine Instanz einer Klasse mit dem Schlüsselwort instanceof
ist, 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 |