Javascript 关于原型继承的一个令人困惑的案例
我正在学习JS OOP的东西,发现了一个让我困惑的案例。在下面的代码片段中,我使用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)
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
的每个实例都将引用该共享值,而不是拥有自己的单独值。在您的示例中,这没有什么区别,但一旦您开始为这些函数获取参数,这将非常重要。