Почему не работает второй вариант?
И можно ли что бы родительские свойства были в прототипе?
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());
"Не работает", так как внутри конструктора объект уже создан и его прототип назначен.
Так как меняется целиком объект прототипа, это никак не отразится на уже созданных объектах.
Вместо этого можно перенести все свойства из объекта 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);
Однако обновлять прототип для всех созданных объектов, при каждом создании объектов может быть не очень хорошей идеей.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости