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 September 2015.
Die statische Dateneigenschaft Symbol.hasInstance
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 Konstruktorobjekt ein Objekt als seine Instanz erkennt.
Probieren Sie es aus
Wert
Das bekannte Symbol Symbol.hasInstance
.
Eigenschaften der Symbol.hasInstance -Property |
|
---|---|
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:
- Wenn
constructor
eine[Symbol.hasInstance]()
-Methode hat, rufen Sie sie mitobject
als erstem Argument auf und geben Sie das Ergebnis zurück, das in einen booleschen Wert umgewandelt wurde. 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, legt meistens 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 beispielsweise folgendermaßen 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üfung der Instanz eines Objekts
In gleicher Weise, wie Sie prüfen können, ob ein Objekt eine Instanz einer Klasse ist, indem Sie das Schlüsselwort instanceof
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 Language Specification # sec-symbol.hasinstance |
Browser-Kompatibilität
BCD tables only load in the browser