Javascript "E;。。不是一个函数;使用原型继承创建子类的方法时出错

Javascript "E;。。不是一个函数;使用原型继承创建子类的方法时出错,javascript,prototype,Javascript,Prototype,我正在学习JavaScript原型。这里雇员是父母,我在我的程序员原型中继承了它,但当我尝试运行我的子原型(即程序员)的favoriteLanguage方法时,它表明favoriteLanguage不是一个函数。我试着阅读Mozilla文档,但我不明白这些内容是否相关!谁能简单地帮我一下吗 编辑:我知道我可以使用类,但我想知道为什么在这种情况下它不起作用 代码如下: 职能员工(givenName、givenExperience、givenDivision){ this.name=givenNa

我正在学习JavaScript原型。这里雇员是父母,我在我的程序员原型中继承了它,但当我尝试运行我的子原型(即程序员)的favoriteLanguage方法时,它表明favoriteLanguage不是一个函数。我试着阅读Mozilla文档,但我不明白这些内容是否相关!谁能简单地帮我一下吗

编辑:我知道我可以使用类,但我想知道为什么在这种情况下它不起作用

代码如下:

职能员工(givenName、givenExperience、givenDivision){
this.name=givenName;
这个经验=给定的经验;
这个分割=给定的视觉;
}
Employee.prototype.glosson=function(){
return`我是${this.name},这家公司是最好的';
}
Employee.prototype.joiningYear=函数(){
回归2020年——这是一次体验;
}
函数程序员(givenName、givenExperience、givenDivision、语言、github){
调用(this、givenName、givenExperience、givenDivision);
这种语言=语言;
this.github=github;
}
Programmer.prototype.favoriteLanguage=函数(){//错误部分
if(this.language=='python'){
返回‘Python’;
}
否则{
返回'JavaScript';
}
}
Programmer.prototype=Object.create(Employee.prototype);
Programmer.prototype.constructor=程序员;
//setPrototypeOf(Programmer.prototype,Employee.prototype);
让arju=new程序员(“arju-Aman”,0,“Developer”,“javaScript”,“arjuaman”);
控制台日志(arju);
//console.log(arju.joiningYear());
//console.log(arju.lamposon());

log(arju.favoriteLanguage())//此处调用
问题是您正在向默认的
程序员添加属性。prototype
对象:

Programmer.prototype.favoriteLanguage = function(){
    // ...
}
…但过了一会儿,您将用新对象完全替换该对象:

Programmer.prototype = Object.create(Employee.prototype);
新对象将不具有您添加到旧对象中的属性

要修复它,只需将
Programmer.prototype=
语句移到添加属性的语句上方:

职能员工(givenName、givenExperience、givenDivision){
this.name=givenName;
这个经验=给定的经验;
这个分割=给定的视觉;
}
Employee.prototype.glosson=function(){
return`我是${this.name},这家公司是最好的';
}
Employee.prototype.joiningYear=函数(){
回归2020年——这是一次体验;
}
函数程序员(givenName、givenExperience、givenDivision、语言、github){
调用(this、givenName、givenExperience、givenDivision);
这种语言=语言;
this.github=github;
}
//***移动
Programmer.prototype=Object.create(Employee.prototype);
Programmer.prototype.constructor=程序员;
Programmer.prototype.favoriteLanguage=函数(){
if(this.language=='python'){
返回‘Python’;
}
否则{
返回'JavaScript';
}
}
让arju=new程序员(“arju-Aman”,0,“Developer”,“javaScript”,“arjuaman”);
控制台日志(arju);

log(arju.favoriteLanguage())为什么不使用类呢?他们对这些东西很感兴趣,可读性很强。我怀疑这一行:
Programmer.prototype=Object.create(Employee.prototype)覆盖了迄今为止在`
Programmer.prototype
下声明的所有内容。试着改变顺序@甘油我知道我可以上课,但我在学习阶段,我想知道这里出了什么问题@尼拉法西是的,就是这样@阿胡阿曼-除了一个错误,祝贺你获得了上述权利的继承部分。大多数人不会,他们会使用
newemployee
来创建
程序员.prototype
对象,或者不正确地从
Programmer
调用
Employee
,等等。不错@阿胡阿曼-别担心!我还补充了答案。为了更好,我在新书《JavaScript:New Toys》的第4章详细介绍了
语法,并在第18章介绍了私有字段等。如果您感兴趣,请在我的个人资料中添加链接。