Javascript 关于原型继承的一个令人困惑的案例

Javascript 关于原型继承的一个令人困惑的案例,javascript,oop,inheritance,Javascript,Oop,Inheritance,我正在学习JS OOP的东西,发现了一个让我困惑的案例。在下面的代码片段中,我使用Object.create方法来实现继承 function Parent(){ this.name = "wang"; } function Child(){ this.age = 28; } Child.prototype = Object.create(Parent.prototype) var mychild = new Child(); console.log(mychild.name)

我正在学习JS OOP的东西,发现了一个让我困惑的案例。在下面的代码片段中,我使用
Object.create
方法来实现继承

function Parent(){
    this.name = "wang";
}
function Child(){
   this.age = 28;
}

Child.prototype = Object.create(Parent.prototype)
var mychild = new Child();
console.log(mychild.name)
mychild.name
未定义

但是如果我使用
newparent()
来执行继承部分,它可以如下工作:

function Parent(){
    this.name = "wang";
}
function Child(){
    this.age = 28;
}

Child.prototype = new Parent();
var mychild = new Child();
console.log(mychild.name)

我曾经读过一些教程,其中说实际上
Object.create
方法是正确的方法。那么我的代码怎么了?

您的第一个示例对于继承来说是正确的,但是需要注意的是,您没有对新创建的
子实例调用
父函数

为此,您可以使用
调用
应用

function Child() {
  Parent.call(this)
  this.age = 28
}
函数父函数(){
this.name=“王”;
}
函数子(){
家长。打电话(这个);
这个年龄=28岁;
}
Child.prototype=Object.create(Parent.prototype);
var mychild=new Child();

console.log(mychild.name)我可以想到“应用或调用”解决方案。但是原型继承说,如果在
Child
中找不到
name
属性,那么将尝试在Child的原型
Parent
中找到
name
属性。现在我已经建立了原型关系,为什么它不能工作?事实上,这就是我的困惑所在。@ChrisBao,如果你不调用
父对象
,那么在原型链中的任何地方怎么可能设置
名称
属性呢
Parent.prototype
没有
name
属性集,并且
对象。create
Parent
函数一无所知。更重要的是,如果您设置
Child.prototype.name
(无论是通过
new Parent()
实例化还是手动将其设置为
Child.prototype.name=“wang”
Child
的每个实例都将引用该共享值,而不是拥有自己的单独值。在您的示例中,这没有什么区别,但一旦您开始为这些函数获取参数,这将非常重要。