Я думаю, вы, возможно, немного запутались в том, как / когда ваши котята рождаются и как вы с ними взаимодействуете.
Самый простой способ настроить это - создать функцию, которая будет генерировать ваших котят. Кроме того, добавьте еще одно свойство, которое содержит котят.
Учитывая приведенную ниже настройку, как только вы "обновите" Playroom
, он сгенерирует это количество котят и установит kittens
свойство к набору данных.
После этого вы можете взаимодействовать с котятами по индексу, обратившись к свойству kittens
. т.е. Playroom.kittens[<index>].<property>
class House {
constructor(numberOfKittens) {
this.numberOfKittens = numberOfKittens
this.kittens = this.makeKittens(); // <-- Set a property for your kittens to live
this.exampleKitten = {
7: {
name: "Jenny",
favoriteToy: "dog"
}
}
}
makeKittens() { // Make a function that generates your kittens
const kitts = {};
for (let i = 0; i < this.numberOfKittens; i++) {
kitts[i] = new Kitten(`Kitten ${i}`);
}
return kitts;
}
}
class Playroom extends House {
constructor(numberOfKittens, kittens, exampleKitten) {
super(numberOfKittens, kittens, exampleKitten)
}
}
class Kitten {
constructor(name, favoriteToy) {
this.name = name
this.favoriteToy = favoriteToy
}
}
let p = new Playroom(15)
// p.makeKittens()[0].name = "Does not work"
// p.exampleKitten[7].name = "This does work"
console.log('Kitten Playroom', p);
console.log('First Kitten Name', p.kittens[0].name);
console.log('Updating First Kitten Name to "Frank"');
p.kittens[0].name = 'Frank';
console.log('First Kitten Name', p.kittens[0].name);
Я бы также предложил обновить любой kittens
по индексу, так как он не читается и подвержен ошибкам (индекс выходит за пределы диапазона, отключается на единицу и т. Д ... )
Я бы предложил добавить функцию, подобную этой:
updateKitten(idx, name) { // Or whatever you're wanting to update
const kitten = this.kittens[idx];
if (kitten) {
kitten.name = name;
return kitten;
}
throw new Error(`No kitten at index ${idx}`); // or return null or however you want to handle it
}