所有,我都知道定义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
的好处,有什么办法可以做到吗?还是我不知道的东西? 最佳答案
您需要这种封装做什么?设置this.Data=jData
有什么问题?这很简单,可以解决您的问题。为什么最糟糕的事情就是失去关闭的好处?实际上应该避免关闭,因为它们可能导致非常时髦的问题(内存泄漏?)。