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