0

我想要做的是从and继承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

这更像是装饰器模式继承。但它的工作如你所料,只需调用c.render(). 要进行经典的原型继承,只需指定TFieldTChildField. 查看了解 JavaScript 中的原型继承

于 2013-04-08T08:33:39.663 回答
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);
于 2013-04-08T08:34:55.327 回答