Symbol.hasInstance
Baseline
Ampliamente disponible
Esta característica está consolidada y funciona en muchos dispositivos y versiones de navegador. Está disponible en todos los navegadores desde abril de 2017.
El símbolo conocido como Symbol.hasInstance se utiliza para determinar si un objeto constructor reconoce un objeto como su instancia. El comportamiento del operador instanceof puede personalizarse mediante este símbolo.
Pruébalo
class Array1 {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance);
}
}
console.log([] instanceof Array1);
// Expected output: true
Atributos de la propiedad Symbol.hasInstance | |
|---|---|
| Sobrescribir | No |
| Numerable | No |
| Configurable | No |
Ejemplos
>Comportamiento de instanceof personalizado
Podrías personalizar el comportamiento de instanceof de la siguiente manera, por ejemplo:
js
class MyArray {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance);
}
}
console.log([] instanceof MyArray); // true
js
function MyArray() {}
Object.defineProperty(MyArray, Symbol.hasInstance, {
value: function (instance) {
return Array.isArray(instance);
},
});
console.log([] instanceof MyArray); // true
Comprobación de la instancia de un objeto
De la misma manera que se puede comprobar si un objeto es una instancia de una clase utilizando la palabra clave instanceof, también podemos utilizar Symbol.hasInstance para dichas comprobaciones.
js
class Animal {
constructor() {}
}
const cat = new Animal();
console.log(Animal[Symbol.hasInstance](cat)); // true
Especificaciones
| Especificación |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.hasinstance> |