繁体   English   中英

在JavaScript中更新嵌套对象属性

[英]Update Nested Object Property in JavaScript

我下面有以下代码:

 class Set { constructor() { console.log("New Set!"); } get repsCompleted() { return this._repsCompleted; } set repsCompleted(value) { this._repsCompleted = value; } } class Exercise { constructor(name) { console.log(name); this.name = name; } get sets() { return [new Set(), new Set(), new Set()] } } let barbellSquat = new Exercise("Barbell Squat"); let updatedBarbellSquat = updateRepsCompleted(barbellSquat); console.log(updatedBarbellSquat); function updateRepsCompleted(exercise) { for (var i = 0; i < exercise.sets.length; i++) { exercise.sets[i].repsCompleted = 5; } return exercise; } 

我有一个课堂练习,其中有一个属性集,它是Set类型的对象的数组。

因此,我在Exercise类上创建了一个新对象,然后将该对象传递给一个函数,该函数的目的是更新设置的对象并将属性“ repsCompleted”设置为5。

然后,我在console.log运动对象中,发现repsCompleted是未定义的。 我不知道为什么。

这是摆弄代码的地方:

https://jsfiddle.net/the_archer/a09tpr63/10/

你不应该使用sets的getter方法。 每次读取或分配相应的属性时,都会使用getter或setter,以允许您自定义属性的工作方式。 不仅是在第一次访问属性时才使用吸气剂。

因此,每次使用exercise.sets它都会创建一个包含3个空Set对象的新数组。 sets应该是一个普通属性,因此您每次都可以检索相同的值。 您可以在构造函数中对其进行初始化。

如果要隐藏sets属性,就像在Set类中使用repsCompleted ,则可以使用相同的方法:对实际属性使用不同的名称,并定义用于访问它的getter和setter。 您还可以通过检查属性是否已设置来延迟初始化它。

 class Set { constructor() { console.log("New Set!"); } get repsCompleted() { return this._repsCompleted; } set repsCompleted(value) { this._repsCompleted = value; } } class Exercise{ constructor(name) { this.name = name; this._sets = null; } get sets() { if (!this._sets) { this._sets = [new Set(), new Set(), new Set()]; } return this._sets; } set sets(value) { this._sets = value; } } let barbellSquat = new Exercise("Barbell Squat"); let updatedBarbellSquat = updateRepsCompleted(barbellSquat); console.log(updatedBarbellSquat); function updateRepsCompleted(exercise) { for (var i = 0; i < exercise.sets.length; i++) { exercise.sets[i].repsCompleted = 5; } return exercise; } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM