JavaScript метод isPrototypeOf()
JavaScript ObjectОпределение и применение
JavaScript метод isPrototypeOf() проверяет существует ли указанный объект в цепочке прототипов другого объекта, возвращая при этом логическое значение. Метод возвращает значение true, если объект, в цепочке прототипов которого производится поиск (параметр метода) содержит объект на котором вызывается метод. Метод возвращает значение false, если объект, в цепочке прототипов которого производится поиск не является объектом, или объект на котором вызывается метод отсутствует в цепочке его прототипов.
Обращаю Ваше внимание, что цепочка прототипов служит для совместного использования функциональных возможностей несколькими экземплярами одного типа объектов. Пример использования вы можете увидеть ниже в примерах использования.
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
isPrototypeOf() | Да | Да | Да | Да | Да | Да |
JavaScript синтаксис:
prototypeObj.isPrototypeOf( obj );
Версия JavaScript
ECMAScript 3 (изначальное определение)Значения параметров
Параметр | Описание |
---|---|
obj | Объект, в цепочке прототипов которого производится поиск. Обязательный параметр. |
Пример использования
В этом примере мы рассмотрим с Вами как с помощью метода create() указать создаваемому объекту объект, который будет использован в качестве прототипа и проверим существует ли создаваемый объект в его цепочке прототипов.
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 ); // {firstName: "Boris", lastName: "Britva"} console.log( myObj.fullName() ); // Boris Britva console.log( myObj.upperCase() ); // BORIS BRITVA // проверяем существует ли указанный объект в цепочке прототипов другого объекта obj.isPrototypeOf( myObj ); // true myObj.isPrototypeOf( obj ); // false
В этом примере мы иницилизировали переменную, содержащую объект, который содержит два метода, первый возвращает значения свойств текущего объекта firstName и lastName, а второй делает тоже самое, но дополнительно с помощью метода toUpperCase() приводит строковое значение к верхнему регистру.
Далее с использованием метода create() мы создали новый объект с указанным объектом прототипом obj и двумя собственными (неунаследованными) свойствами, описываемые дескрипторами. Ключ (атрибут) value устанавливает значение для свойств. Подробную информацию о дескрипторах свойств вы можете получить в описании метода defineProperty(), который позволяет определить новое или изменить существующее свойство объекта, описывая его дескрипторами.
После этого мы выводим в консоль содержимое нашего объекта (собственные свойства) и используем по очереди два унаследованных от объекта-прототипа метода. Затем с помощью метода isPrototypeOf() проверяем существует ли указанный объект в цепочке прототипов другого объекта.
Как вы можете заметить объект obj действительно находится в цепочке прототипов объекта myObj (метод возвращает логическое значение true), а объект myObj не находится в цепочке прототипов объекта obj (метод возвращает логическое значение false).
В следующем примере мы рассмотрим базовый алгоритм работы метода isPrototypeOf():
let myObj = new Object(); // создаем объект Object.prototype.isPrototypeOf( myObj ) // true (myObj объект) Function.prototype.isPrototypeOf( myObj ); // false (myObj объект) Function.prototype.isPrototypeOf( myObj.toString ); // true (toString функция) let arr = new Array( 7,7,7 ); // создаем массив Array.prototype.isPrototypeOf( arr ); // true (arr – массив) // ниже представлен способ выполнения аналогичного теста myObj.constructor == Object; // true (myObj создан с помощью конструктора Object()) myObj.toString.constructor == Function; // true (myObj.toString функция создана с помощью конструктора Function()) // Объекты-прототипы сами имеют прототипы, так как объекты-функции наследуют свойства как от Function.prototype, так и Object.prototype Object.prototype.isPrototypeOf(Function.prototype); // trueJavaScript Object