JavaScript метод Object.prototype.isPrototypeOf()

Определение и применение

JavaScript метод isPrototypeOf() проверяет существует ли указанный объект в цепочке прототипов другого объекта, возвращая при этом логическое значение. Метод возвращает значение true, если объект, в цепочке прототипов которого производится поиск (параметр метода) содержит объект на котором вызывается метод. Метод возвращает значение false, если объект, в цепочке прототипов которого производится поиск не является объектом, или объект на котором вызывается метод отсутствует в цепочке его прототипов.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Object.isPrototypeOf
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
isPrototypeOf✓1✓12✓1✓4✓3✓18✓4✓10.1✓1✓1.0✓1✓1

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
prototypeObj.isPrototypeOf( obj );

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

ECMAScript: Object.prototype.isPrototypeOf()

Значения параметров

Object: справочные сведения
Параметр Описание
obj Объект, в цепочке прототипов которого производится поиск. Обязательный параметр.

Примеры, попробуйте сами

В этом примере мы рассмотрим с Вами как с помощью метода create() указать создаваемому объекту объект, который будет использован в качестве прототипа и проверим существует ли создаваемый объект в его цепочке прототипов.

В примере «Проверка цепочки прототипов» показан результат вызова метода.

Проверка цепочки прототипов

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Проверка цепочки прототипов</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
let obj = {
    fullName: function () {
        // возвращает значения свойств текущего объекта firstName и lastName
        return this.firstName + ' ' + this.lastName
    },
    upperCase: function () {
        // возвращает значения свойств текущего объекта firstName и lastName в верхнем регистре
        return (this.firstName + ' ' + this.lastName).toUpperCase()
    },
}

let myObj = Object.create(obj, {
    // объект-прототип соответствует объекту obj
    firstName: {
        // добавляем новое свойство
        value: 'Boris', // указываем значение свойства
    },
    lastName: {
        // добавляем новое свойство
        value: 'Britva', // указываем значение свойства
    },
})

console.log(myObj) // {} — свойства из дескрипторов по умолчанию неперечислимы
console.log(myObj.firstName, myObj.lastName) // Boris Britva
console.log(myObj.fullName()) // Boris Britva
console.log(myObj.upperCase()) // BORIS BRITVA

// проверяем существует ли указанный объект в цепочке прототипов другого объекта
console.log(obj.isPrototypeOf(myObj)) // true
console.log(myObj.isPrototypeOf(obj)) // false

В этом примере мы инициализировали переменную, содержащую объект, который содержит два метода, первый возвращает значения свойств текущего объекта firstName и lastName, а второй делает тоже самое, но дополнительно с помощью метода toUpperCase() приводит строковое значение к верхнему регистру.

Далее с использованием метода create() мы создали новый объект с указанным объектом прототипом obj и двумя собственными (неунаследованными) свойствами, описываемые дескрипторами. Ключ (атрибут) value устанавливает значение для свойств. Подробную информацию о дескрипторах свойств вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.

После этого мы выводим в консоль содержимое нашего объекта (собственные свойства) и используем по очереди два унаследованных от объекта-прототипа метода. Затем с помощью метода isPrototypeOf() проверяем существует ли указанный объект в цепочке прототипов другого объекта.

Как вы можете заметить объект obj действительно находится в цепочке прототипов объекта myObj (метод возвращает логическое значение true), а объект myObj не находится в цепочке прототипов объекта obj (метод возвращает логическое значение false).

В следующем примере мы рассмотрим базовый алгоритм работы метода isPrototypeOf():

В примере «Встроенные прототипы» показан результат вызова метода.

Встроенные прототипы

Измените свойства исходного объекта и сравните результат до и после вызова метода.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Встроенные прототипы</title>
  </head>
  <body>
    <p>Результат выполнения выводится в консоль.</p>
  </body>
</html>
main.js
JavaScript
let myObj = new Object() // создаем объект
console.log(Object.prototype.isPrototypeOf(myObj)) // true (myObj объект)
console.log(Function.prototype.isPrototypeOf(myObj)) // false (myObj объект)
console.log(Function.prototype.isPrototypeOf(myObj.toString)) // true (toString функция)

let arr = new Array(7, 7, 7) // создаем массив
console.log(Array.prototype.isPrototypeOf(arr)) // true (arr – массив)

// ниже представлен способ выполнения аналогичного теста

console.log(myObj.constructor == Object) // true  (myObj создан с помощью конструктора Object())
console.log(myObj.toString.constructor == Function) // true (myObj.toString функция создана с помощью конструктора Function())

// Объекты-прототипы сами имеют прототипы, так как объекты-функции наследуют свойства как от Function.prototype, так и Object.prototype
console.log(Object.prototype.isPrototypeOf(Function.prototype)) // true