JavaScript метод isPrototypeOf()

JavaScript Object

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

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


Обращаю Ваше внимание, что цепочка прототипов служит для совместного использования функциональных возможностей несколькими экземплярами одного типа объектов. Пример использования вы можете увидеть ниже в примерах использования.


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

МетодChrome
Chrome
Firefox
Firefox
Opera
Opera
Safari
Safari
Internet Explorer
IExplorer
Microsoft Edge
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); // true
JavaScript Object