原型化为数组的 JavaScript 对象成员:跨类实例共享
在 JavaScript 中对数组进行原型设计时,了解这些成员是共享的至关重要在所有类实例中。如果您习惯了私有对象成员,这种行为可能看起来违反直觉。
行为解释
JavaScript的原型机制允许对象从父对象继承属性和方法,称为原型。当您将数组定义为原型中的属性时,从该原型继承的所有对象都可以访问它。
示例脚本演示了此行为:
function Sandwich() { // Uncomment this to fix the problem //this.ingredients = []; }
如果取消注释行,每个 Sandwich 实例都会有自己的私有成分数组。然而,当该行被注释掉后,所有实例共享相同的原型数组。
这意味着向cheesburger添加成分也会更新blt和spicy_chicken_sandwich的成分。为了防止这种情况,您必须在构造函数中定义成分数组,如下面更新的示例所示:
function Sandwich() { this.ingredients = []; }
原型与实例
区分原型属性和实例属性至关重要。原型属性由从该原型继承的所有对象共享,而实例属性对于每个对象都是唯一的。
代码修改以修复Behaviour
在示例脚本中,取消注释行 this.ingredients = []; Sandwich 构造函数中确保每个实例都按预期拥有自己的成分数组。
结论
了解 JavaScript 中原型数组的行为对于避免意外共享至关重要类实例之间。永远记住,应该是特定于实例的数据应该在构造函数中定义,而共享数据可以通过继承分配给原型。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3