Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

JavaScript Object-Oriented JavaScript (2015) Prototypal Inheritance Setting Up the Prototype Chain

You're going to modify the Teacher code to inherit from the Person. First, in the Teacher constructor function, call the

I don't know where what im doing wrong. stuck for days

person.js
function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

Person.prototype.fullName = function() {
 return this.firstName + " " + this.lastName; 
};
teacher.js
function Teacher(firstName, lastName, roomNumber) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.room = roomNumber;
}
function Teacher(firstName, lastName, roomNumber){
  Person.call(this, firstName, lastName);
  this.roomNumber = roomNumber;
}
Gunhoo Yoon
Gunhoo Yoon
5,027 Points

Ah sorry! I put unnecessary new operator by accident.

I'll make it cleaner without comment

teacher.js
function Teacher(firstName, lastName, roomNumber) {
  Person.call(this, firstName, lastName);
  this.room = roomNumber;
}
Teacher.prototype = Object.create(Person.prototype);

1 Answer

Gunhoo Yoon
Gunhoo Yoon
5,027 Points

The point is refactoring common property between Person and Teacher.

function Teacher(firstName, lastName, roomNumber) {
  /*
    *Teacher needs name Person has name, finally Teacher is Person
    *So there is no logical barrier which prevents us from extending Teacher based on Person.
    *this.firstName = firstName;
    *this.lastName = lastName;
*/
  Person.call(this, firstName, lastName);
  this.room = roomNumber;
}

//Now we inherit from Person's prototype which has fullName() method.
//Roughly and crudely speaking this is just copying and overloading one prototype to another.
//Fixed this line. Now it will work.
Teacher.prototype = Object.create(Person.prototype);

Check this one of the best video, skip to 50:25 Douglas Crockford talks about object inheritance

I'm still not passing this challenge. Can you please post the code that worked for you.