Вы немного смешиваете шаблоны наследования.Ваше наследование не работает, потому что model
не входит в цепочку прототипов superCar
, оно непосредственно на сам объект.
Вы можете сделать superCar
функцией, подобной машине, и связать ее в цепочку наследования, например:
function superCar(){
this.model = "sedan"
};
function Car(){
superCar.call(this) // this will add model and other properties assigned in the constructor
this.name = null;
}
Car.prototype = Object.create(superCar.prototype); // this will add protoype methods from superCar, but there aren't any
var c1 = new Car();
c1.name="Toyota";
var c2 = new Car();
c2.name="Bmw";
console.log(c1.name);
console.log(c2.name);
console.log(c1.model);
console.log(c2.model);
В качестве альтернативы вы можете использовать Object.create
для создания прототипа-ссылки на объект superCar
с чем-то, основанным на этом:
let superCar ={
model: "sedan"
};
function Car(name){
let obj = Object.create(superCar) // obj will delegate to superCar when it doesn't find a property
obj.name = name
return obj
}
var c1 = Car("Toyota");
var c2 = Car("Bmw");
console.log(c1.name);
console.log(c2.name);
console.log(c1.model);
console.log(c2.model);
Возможно, вы сможете смешать эти два паттерна, но это может сбить с толку.