-1

I have an object called superCar. I have a function Car. I would like to inherit my Car Object from superCar Object. Here is my code:

var superCar = {
model : "sedan"
};
function Car(){
  this.name = null;
}

var c1 = new Car();
c1.name="Toyota";

var c2 = new Car();
c2.name="Bmw";

console.log(c1.name);
console.log(c2.name);

c1.__proto__.__proto__ = superCar.__proto__ ;

console.log(c1.model);

I am expecting the out put will be "Toyota" , "Bmw" , "sedan". But the output is comming out as "Toyota" , "Bmw" , "undefined". Can any one of you please explain why my inheritance did not work?

0

1 Answer 1

1

You are mixing inheritance patterns up a bit. Your inheritance isn't working because model isn't on the superCar prototype chain, it's directly on the object itself.

You can make superCar a function like car and tie it into the inheritance chain like:

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);

Alternatively you can use Object.create to create a prototype-link to the object superCar with something based on this:

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);

You might be able to do a mix of these two pattern, but it's going to be confusing.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.