Reputation: 1
function Student() {
}
Student.prototype.sayName = function() {
console.log(this.name)
}
function EighthGrader(name) {
this.name = name
this.grade = 8
}
EighthGrader.prototype = Object.create(Student)
const carl = new EighthGrader("carl")
carl.sayName() // console.logs "carl" TypeError HERE
carl.grade // 8
Why do I get a TypeError when I use Student as the argument for Object.create? I know it can be fixed using Student.prototype instead.
I thought the sayName() method could still be accessed according to the prototype chain?
Upvotes: 0
Views: 80
Reputation: 816364
You are getting this error because sayName
is not defined on Student
and therefore not on EighthGrader.prototype
. sayName
is defined on Student.prototype
, so the following is the correct way of establishing inheritance:
EighthGrader.prototype = Object.create(Student.prototype);
Inheritance always works by having the child class' prototype
"inherit" from the parent class' prototype
.
See also Benefits of using `Object.create` for inheritance
Upvotes: 1