ООП в JavaScript наследование

154
08 октября 2019, 13:00

Почему не работает второй вариант? И можно ли что бы родительские свойства были в прототипе? a.call(this) по этой причине не подходит.

function A() { 
  this.one = 1; 
} 
 
function B() { 
  this.two = 2; 
} 
B.prototype = new A(); 
x = new B(); 
console.log(x); 
 
function a() { 
  this.one = 1; 
} 
 
function b() { 
  this.constructor.prototype = new a(); 
  this.two = 2; 
} 
z = new b(); 
console.log(z); 
console.log(new b());

Answer 1

"Не работает", так как внутри конструктора объект уже создан и его прототип назначен.

Так как меняется целиком объект прототипа, это никак не отразится на уже созданных объектах.

Вместо этого можно перенести все свойства из объекта new a() в сам прототип, например так:

function a() { 
  this.one = 1; 
} 
 
function b() { 
  Object.assign(this.constructor.prototype, new a()); 
  this.two = 2; 
} 
z = new b(); 
console.log(z);

Однако обновлять прототип для всех созданных объектов, при каждом создании объектов может быть не очень хорошей идеей.

READ ALSO
Получить геоданные массива адресов

Получить геоданные массива адресов

Есть массив адресовМне нужно получить координаты этих адресов и отобразить их на карте

203
Получение данных с сайта www.investing.com в google sheets

Получение данных с сайта www.investing.com в google sheets

столкнулся со следующей проблемой: Пытаюсь получить с сайта https://wwwinvesting

154
Конкатенация в объектах js

Конкатенация в объектах js

Дан следующий код

163
Как работают регулярные выражения в js?

Как работают регулярные выражения в js?

Есть строка 'IM'">Сегодня 12:36</span> Хочу получить из него дату

178