是继承吗?有些机构可以解释一下吗?

时间:2013-05-06 07:01:13

标签: 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:{
       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

当我使用以下构造函数创建z.getName()时调用Obj2时会导致错误"z has no method getName()"

function Obj2(name){
   //var x=new Obj(name);
   this.prototype=new Obj(name);
   this.prototype=Object.defineProperties(this.prototype,{
   myFunc:{
       value:function(){
       alert("I am myFunc");
       }
   }
   });
   //return x;
}

当我尝试这样做时,我得到同样的错误

    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;
}

发生了什么我完全混淆为什么第二种和第三种编写构造函数的方法不能继承方法Obj2,是构造函数继承或创建另一个副本的第一种方式getName()上新定义的属性的x

0 个答案:

没有答案