1

我有两个对象

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使用新定义的属性创建另一个副本x.prototype

4

0 回答 0