[英]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是未定义的。 我不知道为什么。
这是摆弄代码的地方:
你不应该使用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.