使用for循环在类构造函数中创建x个新对象,然后在JavaScript中修改它们

使用for循环在类构造函数中创建x个新对象,然后在JavaScript中修改它们,javascript,class,object,constructor,Javascript,Class,Object,Constructor,我试图在类构造函数中创建x个数量的new Kitten(),并将它们存储在this.kittens对象中。但是当我以后尝试修改这个对象的时候,什么都没有发生,或者我没有定义。但是,我能够修改房屋的另一个属性/对象,或者更具体地说,修改儿童级游戏室,而不会出现任何问题(例如,Kitten),这是“正常创建的” 我知道房屋构造器每次调用时都会创建一个新的kittens对象,但是我希望它的行为与exampleKitten相同,也就是说,一旦它被创建,我希望能够修改它的内容。我怎样才能做到这一点?像我这

我试图在类构造函数中创建x个数量的new Kitten(),并将它们存储在this.kittens对象中。但是当我以后尝试修改这个对象的时候,什么都没有发生,或者我没有定义。但是,我能够修改房屋的另一个属性/对象,或者更具体地说,修改儿童级游戏室,而不会出现任何问题(例如,Kitten),这是“正常创建的”

我知道房屋构造器每次调用时都会创建一个新的kittens对象,但是我希望它的行为与exampleKitten相同,也就是说,一旦它被创建,我希望能够修改它的内容。我怎样才能做到这一点?像我这样在构造函数中创建和存储x个数量的新对象是一种不好的做法吗

我希望你能理解我的问题!提前谢谢

class House {
  constructor (numberOfKittens) {
    this.numberOfKittens = numberOfKittens
    this.kittens = function () {
         const kitts = {}
          for (let i = 0; i < this.numberOfKittens; i++) {
            kitts[i] = new Kitten(`Kitten ${i}`)
          }
         return kitts
        }
   this.exampleKitten = {7: {name: "Jenny", favoriteToy: "dog"}}
   }

}

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.kittens()[0].name = "Does not work"
p.exampleKitten[7].name = "This does work"
阶级之家{
构造函数(numberOfKittens){
this.numberOfKittens=numberOfKittens
this.kittens=函数(){
常数kitts={}
for(设i=0;i
因此
kittens()
方法实际上返回了一个对象,但它没有将该对象指定为
kittens
的新值。这里有一个工厂,如果需要,可以使用它创建单独的实例

const house=新房子()
const kittens1=house.kittens()
const kittens2=house.kittens()
小猫1[0]=老小猫
kittens2[0]=新小猫
小猫1[0]//还是老小猫
如果您希望一次只管理house对象上的一个实例,我将重命名您的方法
addKittens()
或其他方法,并将结果指定给
this.kittens
。此外,我将使用本机数组,而不是使用索引作为键的对象。这将允许您利用js提供的所有强大的数组方法


班房{
构造函数(){
这个。小猫=[]
}
addKittens(Numof kittens){
for(设i=0;i
因此
kittens()
方法实际上返回了一个对象,但它没有将该对象指定为
kittens
的新值。这里有一个工厂,如果需要,可以使用它创建单独的实例

const house=新房子()
const kittens1=house.kittens()
const kittens2=house.kittens()
小猫1[0]=老小猫
kittens2[0]=新小猫
小猫1[0]//还是老小猫
如果您希望一次只管理house对象上的一个实例,我将重命名您的方法
addKittens()
或其他方法,并将结果指定给
this.kittens
。此外,我将使用本机数组,而不是使用索引作为键的对象。这将允许您利用js提供的所有强大的数组方法


班房{
构造函数(){
这个。小猫=[]
}
addKittens(Numof kittens){
for(设i=0;i
我想你可能对你的小猫是如何/何时出生的以及你是如何与它们互动的感到有点困惑

更简单的设置方法是创建一个函数来生成小猫。另外,添加另一个容纳小猫的属性

根据下面的设置,一旦“新建”了
游戏室,它将生成该数量的小猫,并将
小猫
属性设置为数据集

然后,您可以通过访问
kittens
属性,通过索引与小猫进行交互。ie
游戏室。小猫[]。

阶级之家{
构造函数(numberOfKittens){
this.numberOfKittens=numberOfKittens

this.kittens=this.makeKittens();//我想你可能对你的小猫是如何/何时出生的以及你是如何与它们互动的有些困惑

设置它的更简单方法是创建一个函数来生成小猫。另外,添加另一个保存小猫的属性

根据下面的设置,一旦“新建”了
游戏室,它将生成该数量的小猫,并将
小猫
属性设置为数据集

然后,您可以通过访问
kittens
属性,即
Playroom.kittens[],通过索引与小猫互动。

阶级之家{
构造函数(numberOfKittens){
this.numberOfKittens=numberOfKittens

this.kittens=this.makeKittens();//否,
House
构造函数不创建任何小猫。
kittens()
函数在每次调用时都会这样做。您确实应该将创建内容移动到构造函数中,以使代码按预期工作。感谢您的快速回复Bergi,但请您详细说明。函数是否已经在构造函数中?或者您的意思是什么?
House.kittens
方法创建kittens并返回m(对于类外的调用方),但从不在内部存储它们。除了范围不好(房子不应该知道关于小猫的任何信息),如果你想重复使用它们,你应该将结果存储在某个地方。而且
exampleKitten
是一个普通对象,而不是insta