Javascript prototype как аналог наследования

3 марта 2022 г.

Для понимая работы прототипного наследования создадим простой объект:

const human = {
 name: «Alex»,
 age: «20»,
 greet: function(){
  console.log(«Hello»)
 }
}

Теперь, обратившись к этому объекту, мы можем получить все поля, которые присвоили, например: human.age выведит 25

При обращении к несуществующему полю, например human.address, консоль выдаст ошибку и это логично, ведь такого поля нет в объекте human. Однако, при обращении human.toString(), ошибки не будет, хотя такого метода тоже нет в объекте.

Все объясняется тем, что созданный нами объект "human" наследуется от глобального класса Object. В js есть все объекты, даже строка. Это основное правило при понимании js. Если переписать создание объекта human не через упрощенный синтаксис, мы сможем увидеть, что все заданные поля будут в первом уровне полей объекта, а в поле «proto:» все поля определенные в глобальном объекте Object.

 const human = new Object({
 name: «Alex»,
 age: «20»,
 greet: function(){
  console.log(«Hello»)
 }
})

Поля объекта Object можно так же расширять и дополнять. Например, мы можем добавить свой метод для объекта Object.

Object.prototype.address = function() { console.log(«Ленина 1») }

Теперь, если вызвать human.address мы не получим ошибки, т.к такой метод уже есть у класса Object от которого наследуется наш объект human. Благодаря такой конструкции, мы расширили базовый прототип.

Следуя этой логике, мы можем создать дугой объект и наследоваться уже от объекта human, который в свою очередь уже наследуется от Object как мы только что увидели. Сделать это можно с помощью такой конструкции:

const viktoriya = Object.create(human)

Мы создали пустой объект, но если написать viktoriya.age получим 20, т.к такое значение прописано в human. Так же мы не получим ошибки, если вызовим viktoriya.address, т.к это поле содержиться в иерархии proto наследования глобального класса Object.

Что бы переопределить поля объекта viktoriya, нужно просто прописать viktoriya.age = 25.

Надеюсь статья будет полезна для понимания уже не основ, а более продвинутого понимая работы js.

Комментарии(1)

Фильмы от 27 мая 2022 г.

gddgdfgdfgdfgdfgdffg

Ответить