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