Spec-Zone.ru › JavaScript

Function.prototype[Symbol.hasInstance]()

Базовый уровень Широко доступно

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

Метод [Symbol.hasInstance]() экземпляров Function определяет процедуру по умолчанию для определения того, распознаёт ли функция-конструктор объект как один из экземпляров конструктора. Он вызывается оператором instanceof.

Синтаксис

func[Symbol.hasInstance](value)

Параметры

value
Объект для проверки. Примитивные значения всегда возвращают false.

Возвращаемое значение

true, если func.prototype находится в цепочке прототипов value; в противном случае — false. Всегда возвращает false, если value не является объектом или this не является функцией. Если this является связанной функцией, возвращает результат проверки instanceof для value и нижележащей целевой функции.

Исключения

TypeError
Выбрасывается, если this не является связанной функцией и this.prototype не является объектом.

Описание

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

В отличие от большинства методов, свойство Function.prototype[Symbol.hasInstance]() не является конфигурируемым и не является записываемым. Это функция безопасности, предотвращающая получение нижележащей целевой функции связанной функции. См. этот ответ Stack Overflow для примера.

Примеры

Возврат к поведению instanceof по умолчанию

Вам редко потребуется вызывать этот метод напрямую. Вместо этого, этот метод вызывается оператором instanceof. Вы должны ожидать, что эти два результата обычно будут эквивалентны.

class Foo {}
const foo = new Foo();
console.log(foo instanceof Foo === Foo[Symbol.hasInstance](foo)); // true

Вы можете захотеть использовать этот метод, если хотите вызвать поведение instanceof по умолчанию, но не знаете, имеет ли конструктор переопределенный метод [Symbol.hasInstance]().

class Foo {
  static [Symbol.hasInstance](value) {
    // A custom implementation
    return false;
  }
}

const foo = new Foo();
console.log(foo instanceof Foo); // false
console.log(Function.prototype[Symbol.hasInstance].call(Foo, foo)); // true

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

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

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

Десктопные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on 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
  • 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/Function/Symbol.hasInstance

Spec-Zone.ru

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