Web/JavaScript/Reference/Global objects/Symbol/hasInstance

From Get docs


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 (ECMA-262)The definition of 'Symbol.hasInstance' in that specification.

Browser compatibility

Update compatibility data on GitHub

Desktop Mobile Server
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
hasInstance Chrome

Full support 50

Edge

Full support 15

Firefox

Full support 50

IE

No support No

Opera

Full support 37

Safari

Full support 10

WebView Android

Full support 50

Chrome Android

Full support 50

Firefox Android

Full support 50

Opera Android

Full support 37

Safari iOS

Full support 10

Samsung Internet Android

Full support 5.0

nodejs Full support 6.5.0


Full support 6.5.0


Full support 6.0.0

Disabled'

Disabled' From version 6.0.0: this feature is behind the --harmony runtime flag.

Legend

Full support  
Full support
No support  
No support
User must explicitly enable this feature.'
User must explicitly enable this feature.


See also