Symbol.hasInstance
The Symbol.hasInstance well-known symbol is used to determine if a constructor object recognizes an object as its instance. The instanceof operator's behavior can be customized by this symbol.
Property attributes of Symbol.hasInstance |
|
|---|---|
| Writable | no |
| Enumerable | no |
| Configurable | no |
Examples
Custom instanceof behavior
You could implement your custom instanceof behavior like this, for example:
class MyArray {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance)
}
}
console.log([] instanceof MyArray); // true
function MyArray() { }
Object.defineProperty(MyArray, Symbol.hasInstance, {
value: function(instance) { return Array.isArray(instance); }
});
console.log([] instanceof MyArray); // true
Checking the instance of an object
Just in the same manner at which you can check if an object is an instance of a class using the instanceof keyword, we can also use Symbol.hasInstance for such checks also.
class Animal {
constructor() {}
}
const cat = new Animal();
console.log(Animal[Symbol.hasInstance](cat)); // true
Specifications
| Specification |
|---|
| ECMAScript Language Specification # sec-symbol.hasinstance |
Browser compatibility
BCD tables only load in the browser