0

私がやろうとしているのは、からidandを継承し、 の機能をオーバーライドすることです。これが JavaScript で継承を実装するための標準的な方法であるかどうかを知りたいです。nameTFieldrenderTField

var TField=function(jData)
{
   this.id=jData.id;
   this.name=jData.name;
   this.attributes=jData.attributes;
   this.render=function(){
      alert('TField render.');
   };
};

var TChildField=function(jData)
{
    var t= new TField(jData);
    t.render=function(){
       alert('TChildField render.');
    }
    return t;
}

var tobj={id:"1",name:"test",attribute:{}};


var c= new TChildField(tobj);
alert(c.id);
alert(c.name);
4

2 に答える 2

1

renderまず、コンストラクターから定義を削除し、プロトタイプに直接追加することをお勧めします。

TField.prototype.render=function(){
      alert('TField render.');
};

次に、コンストラクターの継承を設定するには、次を使用します。

var TChildField=function(jData)
{
    TField.call(this,jData)
}

次に、2 つのプロトタイプをリンクします。

TChildField.prototype=Object.create(TField.prototype)

最後に、上書きrender()しますTChildField

TChildField.prototype.render=function(){
      alert('TChildField render.');
};


var TField=function(jData)
{
   this.id=jData.id;
   this.name=jData.name;
   this.attributes=jData.attributes;

};

TField.prototype.render=function(){
      alert('TField render.');
};

var TChildField=function(jData)
{
    TField.call(this,jData)
}

var tobj={id:"1",name:"test",attribute:{}};
TChildField.prototype=Object.create(TField.prototype)
TChildField.prototype.render=function(){
      alert('TChildField render.');
};
var c= new TChildField(tobj);
alert(c.id);
alert(c.name);
于 2013-04-08T08:34:55.327 に答える
1

これは、デコレータ パターンの継承に似ています。しかし、期待どおりに機能します。呼び出すだけc.render()です。古典的なプロトタイプの継承を行うには、 のプロトタイプを代入TFieldするだけですTChildFieldJavaScript でのプロトタイプ継承の理解を参照してください。

于 2013-04-08T08:33:39.663 に答える