Для понимая работы прототипного наследования создадим простой объект:
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.
Фильмы от 27 мая 2022 г.
gddgdfgdfgdfgdfgdffgОтветить