Javascript原型比较未给出预期结果

Javascript原型比较未给出预期结果,javascript,prototype-chain,Javascript,Prototype Chain,我试图理解Java中的javascript原型继承 然后开始尝试以下关于继承的原型分配的实验 函数Person(){} Person.prototype.dance=function(){}; 函数Employee(){} 函数Student(){} Employee.prototype=新员工(); Student.prototype=新人(); emp=新员工(); stu=新生(); log(“Person对象等于:”+(newperson()==newperson()); log(“E

我试图理解Java中的javascript原型继承

然后开始尝试以下关于继承的原型分配的实验

函数Person(){}
Person.prototype.dance=function(){};
函数Employee(){}
函数Student(){}
Employee.prototype=新员工();
Student.prototype=新人();
emp=新员工();
stu=新生();
log(“Person对象等于:”+(newperson()==newperson());
log(“Emp和Stu原型相等:”+(Employee.Prototype==Student.Prototype));
log(“Emp和Stu对象原型相等:”+(Emp.Prototype==Stu.Prototype));

log(“Emp和Stu对象相等:”+(Emp==Stu))如果我理解,您真正想要的是:

函数Person(){}
Person.prototype.dance=function(){};
函数Employee(){}
函数Student(){}
//Employee.prototype=新员工();
//Student.prototype=新人();
const person=新的person();
Employee.prototype=个人;
Student.prototype=人;
const emp=新员工();
const stu=新学生();
log(“Person-Object-Equal:”+(newperson()==newperson());
log(“Emp和Stu原型相等:”+(Employee.Prototype==Student.Prototype));
log(“Emp和Stu对象原型相等:”+(Emp.Prototype===Stu.Prototype));

log(“Emp和Stu对象相等:”+(Emp==Stu))第三次检查返回true的原因很简单,就是
stu.prototype
emp.prototype
都未定义
.prototype
是构造函数中存在的属性;它不存在于
new
ing该构造函数创建的对象上


emp确实有一个
emp.\uuuuu proto\uuuuu
属性,但它已被弃用,您不应该直接访问它<代码>emp.\uuuu proto\uuuu==Employee.prototype
将返回true。访问原型的非推荐方法是
Object.getPrototypeOf(emp)
,尽管您很少有理由使用它。

它们都有不同的
新人()。给他们一个相同的。
emp.prototype
stu.prototype
都不适合放大@NicholasTower的评论。函数具有
prototype
属性,但实例没有。函数的
prototype
属性的命名是javascript中比较容易混淆的方面之一。它只是一个对象,新实例将被原型链接到该对象。他要求解释代码中发生了什么。谢谢,我认为原型也将是所创建对象的属性。