JavaScript метод Object.prototype.isPrototypeOf()
Определение и применение
JavaScript метод isPrototypeOf() проверяет существует ли указанный объект в цепочке прототипов
другого объекта, возвращая при этом логическое значение. Метод возвращает значение true, если объект, в
цепочке прототипов которого производится поиск (параметр метода) содержит объект на котором вызывается метод. Метод
возвращает значение false, если объект, в цепочке прототипов которого производится поиск не является
объектом, или объект на котором вызывается метод отсутствует в цепочке его прототипов.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
isPrototypeOf | 1 | 12 | 1 | 4 | 3 | 18 | 4 | 10.1 | 1 | 1.0 | 1 | 1 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
prototypeObj.isPrototypeOf( obj );
Спецификация
ECMAScript: Object.prototype.isPrototypeOf()
Значения параметров
| Параметр | Описание |
|---|---|
obj |
Объект, в цепочке прототипов которого производится поиск. Обязательный параметр. |
Примеры, попробуйте сами
В этом примере мы рассмотрим с Вами как с помощью метода
create()
указать создаваемому объекту объект, который будет использован в качестве прототипа и проверим существует ли
создаваемый объект в его цепочке прототипов.
В примере «Проверка цепочки прототипов» показан результат вызова метода.
Проверка цепочки прототипов
Измените свойства исходного объекта и сравните результат до и после вызова метода.
index.html
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Проверка цепочки прототипов</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
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 lang="ru">
<head>
<meta charset="UTF-8" />
<title>Встроенные прототипы</title>
</head>
<body>
<p>Результат выполнения выводится в консоль.</p>
</body>
</html>
main.js
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