总之,我知道定义 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
,有什么办法可以做到吗?或者我不知道的东西?谢谢。