Javascript 是遗传吗?有人能解释吗?
我有两个目标Javascript 是遗传吗?有人能解释吗?,javascript,constructor,prototypal-inheritance,Javascript,Constructor,Prototypal Inheritance,我有两个目标 function Obj1(name){ this.prototype={}; this.prototype.Name=name; this.prototype.getName=function(){ alert(this.Name); }; } function Obj2(name){ var x=new Obj1(name); x.prototype=Object.defineProperties(x,{ myFunc
function Obj1(name){
this.prototype={};
this.prototype.Name=name;
this.prototype.getName=function(){
alert(this.Name);
};
}
function Obj2(name){
var x=new Obj1(name);
x.prototype=Object.defineProperties(x,{
myFunc:{
value:function(){
alert("I am myFunc");
}
}
});
return x;
}
var y=new Obj1("Your Name");
var z=new Obj2("Her Name");
y.getName();
z.getName();//works fine in this case
当我在使用以下构造函数创建Obj2
时调用z.getName()
时,会导致一个错误,说“z没有方法getName()”
当我试着这样做的时候,我得到了同样的错误
function Obj2(name){
var x=new Obj(name);
x.prototype={};
x.prototype=Object.defineProperties(x.prototype,{
myFunc:{
value:function(){
alert("I am myFunc");
}
}
});
return x;
}
发生了什么我完全搞不清楚为什么编写构造函数的第二和第三种方法不继承方法
getName()
,是构造函数继承或创建另一个x
副本的第一种方法,该副本在x.prototype
上具有新定义的属性?我不相信这是您拥有的代码。我已经得到了这个。对于第一个示例(在Obj1
中),原型是未定义的。(除了Obj2
中的语法错误之外)。看起来您在这里错误地混合了一堆概念……下面是一个关于如何在基于函数的构造对象上使用原型以及JavaScript如何“从父对象继承”原型链的示例works@FelixKling修复了语法错误,感谢您指出outprototype不能用于实例,如果必须,请使用proto(proto前后两个下划线),但最好使用Obj1.prototype在函数体外部定义“静态”属性。请阅读我之前发布的链接。
function Obj2(name){
var x=new Obj(name);
x.prototype={};
x.prototype=Object.defineProperties(x.prototype,{
myFunc:{
value:function(){
alert("I am myFunc");
}
}
});
return x;
}