Прототипное наследование JavaScript

JavaScript является уникальным в мире популярных языков программирования из-за использования прототипного наследования. Давайте выясним, что это значит

JavaScript является уникальным в мире популярных языков программирования из-за использования прототипного наследования.

В то время как большинство объектно-ориентированных языков используют модель наследования на основе классов, JavaScript основан намодель наследования прототипа.

Что это значит?

Каждый отдельный объект JavaScript имеет свойство, называемоеprototype, который указывает на другой объект.

Этот другой объект - этопрототип объекта.

Наш объект использует этот прототип объекта для наследования свойств и методов.

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

const car = {}

или созданный сnew Objectсинтаксис:

const car = new Object()

в любом случае прототипcarявляетсяObject:

Если вы инициализируете массив, который является объектом:

const list = []
//or
const list = new Array()

прототипArray.

Вы можете убедиться в этом, проверивObject.getPrototypeOf()иObject.prototype.isPrototypeOf()методы:

const car = {}
const list = []

Object.getPrototypeOf(car) === Object.prototype Object.prototype.isPrototypeOf(car)

Object.getPrototypeOf(list) === Array.prototype Array.prototype.isPrototypeOf(list)

Все свойства и методы прототипа доступны объекту, имеющему этот прототип:

Object.prototypeявляется базовым прототипом всех объектов:

Object.getPrototypeOf(Array.prototype) == Object.prototype

Если вам интересно, что является прототипом Object.prototype, прототипа нет: этоnull. Это особенная снежинка ❄️.

Вышеупомянутый пример, который вы видели, является примеромцепочка прототиповна работе.

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

Помимо использованияnewоператор для создания объекта или используя синтаксис литералов для объектов и массивов, вы можете создать экземпляр объекта, используяObject.create().

Первым переданным аргументом является объект, используемый в качестве прототипа:

const car = Object.create({})
const list = Object.create(Array)

Обратите внимание, потому что вы можете создать экземпляр массива, используя

const list = Object.create(Array.prototype)

и в этом случаеArray.isPrototypeOf(list)ложно, в то время какArray.prototype.isPrototypeOf(list)правда.

Скачать мою бесплатнуюРуководство для начинающих по JavaScript


Больше руководств по js: