Spec-Zone.ru › JavaScript

Symbol.hasInstance

Базовая поддержка Широко доступна

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2015 года.

Статическое свойство данных Symbol.hasInstance представляет собой общеизвестный символ Symbol.hasInstance. Оператор instanceof ищет этот символ в своем правом операнде для метода, используемого для определения того, распознает ли конструктор объект как свой экземпляр.

Попробуйте

class Array1 {
  static [Symbol.hasInstance](instance) {
    return Array.isArray(instance);
  }
}

console.log([] instanceof Array1);
// Expected output: true

Значение

Общеизвестный символ Symbol.hasInstance.

Атрибуты свойства Symbol.hasInstance
Записываемый нет
Перечисляемый нет
Настраиваемый нет

Описание

Оператор instanceof использует следующий алгоритм для вычисления возвращаемого значения object instanceof constructor:

  1. Если у constructor есть метод [Symbol.hasInstance](), то вызовите его с object в качестве первого аргумента и верните результат, приведенный к булеву типу. Выбросьте TypeError, если constructor не является объектом, или если constructor[Symbol.hasInstance] не является одним из null, undefined или функцией.
  2. В противном случае, если у constructor нет метода [Symbol.hasInstance]() (constructor[Symbol.hasInstance] равен null или undefined), то определите результат, используя тот же алгоритм, что и для Function.prototype[Symbol.hasInstance](). Выбросьте TypeError, если constructor не является функцией.

Поскольку все функции по умолчанию наследуются от Function.prototype, в большинстве случаев метод Function.prototype[Symbol.hasInstance]() определяет поведение instanceof, когда правая часть является функцией.

Примеры

Пользовательское поведение instanceof

Вы можете реализовать свое пользовательское поведение instanceof следующим образом, например:

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

Проверка экземпляра объекта

Точно так же, как вы можете проверить, является ли объект экземпляром класса, используя ключевое слово instanceof, мы также можем использовать Symbol.hasInstance для таких проверок.

class Animal {
  constructor() {}
}

const cat = new Animal();

console.log(Animal[Symbol.hasInstance](cat)); // true

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-symbol.hasinstance

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS Bun Deno Node.js
hasInstance
50
15
50
37
10
50
50
37
10
5.0
50
10
1.0.0
1.0
6.5.0

См. также

  • instanceof
  • Function.prototype[Symbol.hasInstance]()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API