gpt4 book ai didi

javascript - javascript的Mixin继承模式失去闭包特性

转载 作者:行者123 更新时间:2023-11-30 05:49:18 26 4
gpt4 key购买 nike

总而言之,我知道定义 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 的值是多少,这是因为 的特性关闭

但现在我只是尝试在 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 一样利用 TChildField 的构造函数的参数 jData。我知道我可以定义 this.Data=jData 以便我可以在 TChildField.prototype.render 中使用它,但我不希望它成为一个属性.最糟糕的是失去了 Closure 的好处,有什么办法可以做到吗?或者我不知道的东西?谢谢。

最佳答案

你需要这个封装做什么?设置 this.Data=jData 有什么问题?这很简单,它可以解决您的问题。为什么最糟糕的事情是失去关闭带来的好处?实际上应该避免闭包,因为它们可能会导致非常棘手的问题(内存泄漏?)。

关于javascript - javascript的Mixin继承模式失去闭包特性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15876515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com