JavaScript уникальный язык программирования среди современных популярных языков, потому что использует наследование на основе прототипов. Обычно наследование реализовано с помощью классов. Наследование это механизм переиспользования кода, он позволяет дочерним объекта переиспользовать свойства и методы родительского объекта.
Как же это реализовано в JavaScript? Каждый объект в JavaScript имеет свойство - prototype, которое ссылается на другой объект, называемый прототипом объекта. Объект использует прототип для наследования свойств и методов. Приведу примеры как можно создать объекты в JavaScript:
let car = {};
let person = new Object();
Обе переменные будут иметь тип object
.
Так как массивы в JavaScript тоже являются объектами, приведем примеры создания массивов.
let list0 = [];
let list1 = new Array();
В качестве прототипа будет выступать объект - Array
.
Давайте проверим это
car.__proto__ == Object.prototype; // true
person.__proto__ == new Object().prototype; // true
list.__proto__ == Object.prototype; // false
list.__prototype == Array.prototype; // true
list1.prototype == new Array().__proto__; // true
Все методы и свойства объекта-прототипа будут доступны объекту с этим прототипом. Object.prototype является базовым прототипом для всех объектов. У объекта Object.prototype нету прототипа, он отсутствует.
Свойство __proto__
является не стандартным, но все браузеры поддерживают его. Более правильно будет использовать метод Object.g etPrototypeOf(new Object())
.
Вместо использования new
для создания объектов, можно применять Object.create()
. Первый аргумент для метода используется как прототип.
const car = Object.create({});
const list = Object.create(Array);
Вы можете проверить прототип объекта используя метод isPrototypeOf()
.
Array.isPrototypeOf(list);
В следующей статье
В ES6 появились классы. С ними мы и познакомимся в следующей статье.