我要做的是继承id
中的name
和TField
并覆盖render
的{{1}}功能。我想知道这是否是在JavaScript中实现继承的标准方法。
TField
答案 0 :(得分:1)
这更像是装饰器模式继承。但它按预期工作,只需拨打c.render()
即可。
要进行经典的原型继承,只需将TField
指定为TChildField
的原型。
看Understanding prototypal inheritance in JavaScript
答案 1 :(得分:1)
首先,从构造函数中删除render
定义并将其直接添加到原型中可能是个好主意:
TField.prototype.render=function(){
alert('TField render.');
};
其次,要设置构造函数的继承,请使用:
var TChildField=function(jData)
{
TField.call(this,jData)
}
然后,链接两个原型
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);