1

私は2つのオブジェクトを持っています

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

何が起こっているのか私は完全に混乱しています.2番目と3番目の方法でメソッドをObj2継承するコンストラクタを作成しないのはなぜですか?getName()xx.prototype

4

0 に答える 0