すべて、javascript OOP オブジェクトを定義する従来の方法を知っていました。ここに例があります。
var TField=function(jData)
{
this.id=jData.id;
this.name=jData.name;
this.attributes=jData.attributes;
TField.prototype.render=function(){
alert(jData.id);
};
};
が呼び出されるたびにTField.prototype.render
、 の値が何であるかを知ることができます。これは、 の機能によるものです。jData
Closure
しかし今、私はjavascriptで継承を実装しようとしました.そして、推奨される方法はMixin pattern
. これまでに行ったコードは次のとおりです。
TChildField.prototype.render=function(){
alert('TChildField render.');
//Can not utilize the parameters of the constructor. like jData
};
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);
まあ、問題なく正常に動作します。しかし、私の問題は、 TField のようなjData
コンストラクターのパラメーターを利用できないことがわかったことです。で使用できるようにTChildField
定義できることはわかっていましたが、プロパティとして使用したくありません。それの最悪のことは、の利益を失うことです。それを作る方法はありますか? または、私が知らなかった何か?ありがとう。this.Data=jData
TChildField.prototype.render
Closure