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
constructoreine[Symbol.hasInstance]()Methode hat, wird diese mitobjectals erstem Argument aufgerufen und das Ergebnis zurückgegeben, zu einem Boolean umgewandelt. EinTypeErrorwird ausgelöst, wennconstructorkein Objekt ist oder wennconstructor[Symbol.hasInstance]wedernull,undefinednoch eine Funktion ist. - Andernfalls, wenn
constructorkeine[Symbol.hasInstance]()Methode hat (constructor[Symbol.hasInstance]istnulloderundefined), wird das Ergebnis unter Verwendung des gleichen Algorithmus wie beiFunction.prototype[Symbol.hasInstance]()bestimmt. EinTypeErrorwird ausgelöst, wennconstructorkeine 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> |
Browser-Kompatibilität
Loading…