Основы ООП, прототипно-ориентированное наследование

JavaScript - объектно-ориентированный язык, в котором главную роль играют объекты.

Строка - простой тип данных, но при вызове метода на ней (например, toLowerCase()), она оборачивается в объект, а затем опять возвращается в примитив:

Код
let str = 'some';
let strObj = new String(str);

console.log(typeof(str)); // string
console.log(typeof(strObj)); // object

Пусть есть какой-то объект, как общий прототип, описывающий всех солдат

Код
const soldier = {
  health: 400,
  armor: 100,
};

Создадим конкретного рядового:

Код
const john = {
  health: 100
};

Нужно установить связь, чтобы john имел теже свойства и методы, что и soldier, но при этом сохранял свои.

Делается это несколькими способами.

Устаревший формат:

Код
john.__proto__ = soldier;
console.log(john); // { health: 100 }
console.log(john.armor); // 100

То есть john получил свойство armor от своего прототипа, объекта soldier

С методами точно также, добавим функцию в объект soldier и вызовем её для объекта john

Код
const soldier = {
  health: 400,
  armor: 100,
  sayHello: function() {
  console.log('Hello');
  }
};

const john = {
  health: 100
};

john.__proto__ = soldier;
john.sayHello(); // Hello

Современный способ:

Код
Object.setPrototypeOf(john, soldier);

Так делается, если какой-то объект типа john уже существует, но обычно всё делается на этапе создания объекта.

Например, создаём новый объект john, который будет прототипно наследоваться от soldier

Код
const john = Object.create(soldier);


Про __proto__Наследование без __proto__

Всего комментариев: 0

Имя *:
Email *:
Код *:
Хостинг от uCoz