方法在JavaScript中执行继承时未被传递
我有一个函数构造函数是这样定义的:方法在JavaScript中执行继承时未被传递,javascript,Javascript,我有一个函数构造函数是这样定义的: var Person = function (name, yearOfBirth, job) { this.name = name; this.yearOfBirth = yearOfBirth; this.job = job; } Person.prototype.calculateAge = function () { conso
var Person = function (name, yearOfBirth, job) {
this.name = name;
this.yearOfBirth = yearOfBirth;
this.job = job;
}
Person.prototype.calculateAge = function () {
console.log(2016 - this.yearOfBirth);
};
var Teacher = function (name, yearOfBirth, subject) {
Person.call(this, name, yearOfBirth, "teacher");
this.subject = subject;
}
var roySir = new Teacher("Roy", 1960, "English");
现在我还有另一个函数构造函数,叫做Teacher,我是这样定义的:
var Person = function (name, yearOfBirth, job) {
this.name = name;
this.yearOfBirth = yearOfBirth;
this.job = job;
}
Person.prototype.calculateAge = function () {
console.log(2016 - this.yearOfBirth);
};
var Teacher = function (name, yearOfBirth, subject) {
Person.call(this, name, yearOfBirth, "teacher");
this.subject = subject;
}
var roySir = new Teacher("Roy", 1960, "English");
现在,我通过以下方式创建一个名为roySir的新对象:
var Person = function (name, yearOfBirth, job) {
this.name = name;
this.yearOfBirth = yearOfBirth;
this.job = job;
}
Person.prototype.calculateAge = function () {
console.log(2016 - this.yearOfBirth);
};
var Teacher = function (name, yearOfBirth, subject) {
Person.call(this, name, yearOfBirth, "teacher");
this.subject = subject;
}
var roySir = new Teacher("Roy", 1960, "English");
然而当我试着去做的时候
roySir.calculateAge()我说这个时出错了
“roySir.calculateAge不是一个函数”
为什么calculateAge函数不在这里继承
我的另一个问题是当我检查时:
roySir.hasOwnProperty("name") // true
为什么这里是真的?名称不是父类的属性而不是自己的属性吗
您应该确保
教师的原型继承自人的原型。简单地调用ingPerson
和Teacher
不会让Teacher
继承Person
的原型方法:
var Person=函数(姓名、出生年份、职务){
this.name=名称;
this.yearOfBirth=出生年份;
这个工作=工作;
}
Person.prototype.calculateAge=函数(){
console.log(2016年-今年出生);
};
var Teacher=函数(名称、出生年份、主题){
人称(这个,名字,出生年份,“老师”);
this.subject=主语;
}
Teacher.prototype=Object.create(Person.prototype);
var roySir=新教师(“Roy”,1960年,“英语”);
roySir.calculateAge()
您应该确保教师的原型继承自人的原型。简单地调用ingPerson
和Teacher
不会让Teacher
继承Person
的原型方法:
var Person=函数(姓名、出生年份、职务){
this.name=名称;
this.yearOfBirth=出生年份;
这个工作=工作;
}
Person.prototype.calculateAge=函数(){
console.log(2016年-今年出生);
};
var Teacher=函数(名称、出生年份、主题){
人称(这个,名字,出生年份,“老师”);
this.subject=主语;
}
Teacher.prototype=Object.create(Person.prototype);
var roySir=新教师(“Roy”,1960年,“英语”);
roySir.calculateAge()
您所处的JS环境是否支持新的ES6类
——这要容易得多。。只是跟着教程走。。但它并没有详细说明为什么会这样做,但它不起作用?所以教程有缺陷没有。。它在教程中起作用。。因为他们没有原型方法。。我只是把它作为一个学习练习添加了进来。您是否处于支持新ES6类的JS环境中?这样做要容易得多。。只是跟着教程走。。但它并没有详细说明为什么会这样做,但它不起作用?所以教程有缺陷没有。。它在教程中起作用。。因为他们没有原型方法。。我只是把它添加到自己的学习练习中..为什么要使用Teacher.prototype=Object.create(Person.prototype)。。我可以说Teacher.prototype=Person.prototype?。。它们是一样的吗?请参见编辑-如果您这样做,将突变为Teacher.prototype
将不必要地更改Person.prototype
以及-您不会使用继承,您只会覆盖另一个prototype对象。是的,我正在阅读编辑。非常感谢你把这一点讲清楚。你能回答我关于他自己的财产的另一个问题吗…?:)为什么要使用Teacher.prototype=Object.create(Person.prototype)。。我可以说Teacher.prototype=Person.prototype?。。它们是一样的吗?请参见编辑-如果您这样做,将突变为Teacher.prototype
将不必要地更改Person.prototype
以及-您不会使用继承,您只会覆盖另一个prototype对象。是的,我正在阅读编辑。非常感谢你把这一点讲清楚。你能回答我关于他自己的财产的另一个问题吗…?:)