Baseline Widely available
The Symbol.hasInstance
static data property represents the well-known symbol Symbol.hasInstance
. The instanceof
operator looks up this symbol on its right-hand operand for the method used to determine if the constructor object recognizes an object as its instance.
class Array1 {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance);
}
}
console.log([] instanceof Array1);
// Expected output: true
Value
The well-known symbol Symbol.hasInstance
.
The instanceof
operator uses the following algorithm to calculate the return value of object instanceof constructor
:
constructor
has a [Symbol.hasInstance]()
method, then call it with object
as the first argument and return the result, coerced to a boolean. Throw a TypeError
if constructor
is not an object, or if constructor[Symbol.hasInstance]
is not one of null
, undefined
, or a function.constructor
doesn't have a [Symbol.hasInstance]()
method (constructor[Symbol.hasInstance]
is null
or undefined
), then determine the result using the same algorithm as Function.prototype[Symbol.hasInstance]()
. Throw a TypeError
if constructor
is not a function.Because all functions inherit from Function.prototype
by default, most of the time, the Function.prototype[Symbol.hasInstance]()
method specifies the behavior of instanceof
when the right-hand side is a function.
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(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.
class Animal {
constructor() {}
}
const cat = new Animal();
console.log(Animal[Symbol.hasInstance](cat)); // true
Specifications Browser compatibility See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4