2017-05-10 5 views
0

私はこのコードを例3で修正するのに助けが必要です。私は、この参照のためにプロトタイプを動作させる方法をソートすることはできません。私はローカルスコープにこのreferesを知っているがさえするvarキープを作成=このことはprotoypeに失敗した参照を渡す:カリムの回答に基づいてFIXEDオブジェクト内の関数の中でプロトタイプの作業を行うには?

//exemplo 1 
var m1=function(){ 
    this.a=null; 
    this.b=null; 
    if (typeof this.fr !== "function") { 
     m1.prototype.fr = function (obp) { 
      var propriedade; 
      for (propriedade in obp) { 
     if (obp.hasOwnProperty(propriedade)) { 
      this[propriedade]=obp[propriedade]; 
     } 
      } 
      return this;     
     } 
    } 
} 

var t2=new m1().fr({"a":"eee"}); //works! 
console.log(t2); 


//exemplo 2 
var m1=function(obp){ 
    this.a=null; 
    this.b=null; 
    if (typeof this.fr !== "function") { 
     m1.prototype.fr = function() { 
      var propriedade; 
      for (propriedade in obp) { 
     if (obp.hasOwnProperty(propriedade)) { 
      this[propriedade]=obp[propriedade]; 
     } 
      } 
      return this;     
     } 
    } 
} 

var t2=new m1({"a":"eee"}).fr(); //works! 
console.log(t2); 

//exemplo 3 

var o1={ 
    m1:function(){ 
     var m1=this; 
     this.a=null; 
     this.b=null; 
     if (typeof this.fr !== "function") { 
      this.prototype.fr = function (obp) { //fails here 
       var propriedade; 
       for (propriedade in obp) { 
       if (obp.hasOwnProperty(propriedade)) { 
        thia[propriedade]=obp[propriedade]; 
       } 
       } 
       return this;     
      } 
     } 
    } 
} 
var t2=new o1.m1().fr({"a":"eee"}); //fails! 
console.log(t2); 

//exemplo 1 
var m1=function(){ 
    this.a=null; 
    this.b=null; 
    if (typeof this.fr !== "function") { 
     m1.prototype.fr = function (obp) { 
      var propriedade; 
      for (propriedade in obp) { 
     if (obp.hasOwnProperty(propriedade)) { 
      this[propriedade]=obp[propriedade]; 
     } 
      } 
      return this;     
     } 
    } 
} 

var t1=new m1().fr({"a":"eee"}); 
console.log(t1); 


//exemplo 2 
var m2=function(obp){ 
    this.a=null; 
    this.b=null; 
    if (typeof this.fr !== "function") { 
     m2.prototype.fr = function() { 
      var propriedade; 
      for (propriedade in obp) { 
     if (obp.hasOwnProperty(propriedade)) { 
      this[propriedade]=obp[propriedade]; 
     } 
      } 
      return this;     
     } 
    } 
} 

var t2=new m2({"a":"eee"}).fr(); 
console.log(t2); 

//exemplo 3 

var o1={ 
    m1:new m1() 
} 
var t3=o1.m1.fr({"a":"eee"}); 
console.log(t3); 

答えて

2

これはあなたのコードであります:

var o1={ 
    m1:function(){ 
     var m1=this; 
     this.a=null; 
     this.b=null; 
     if (typeof this.fr !== "function") { 
      this.prototype.fr = function (obp) { //fails here 
       var propriedade; 
       for (propriedade in obp) { 
       if (obp.hasOwnProperty(propriedade)) { 
        thia[propriedade]=obp[propriedade]; 
       } 
       } 
       return this;     
      } 
     } 
    } 
} 

あなたがオブジェクトのメソッド内で現在のインスタンスであることを現在のthisからprototypeにアクセスしようとしています。

しかし、現在のインスタンスがリテラルオブジェクト(o1)であるとprototypeオブジェクトは、あなたがこのケースではありませんコンストラクタ関数に使用されることを意味しています。

o1のコンストラクタ関数を作成してからif文の中にプロトタイプを設定する関数を参照してください

関連する問題