我想在调用类的构造函数时创建对象的数组或对象吗?我的意思是,每次调用类构造函数时,它都会向数组或对象添加新对象。
f.e。
let blocks = {};
class Block(){
constructor(X,Y,width,height){
this.X = X;
this.Y = Y;
...
and now I would like to add this created object to "blocks"
something like: blocks.push(and this object here)
}
}
我如何实现这样的功能?还是应该使用其他功能?
答案 0 :(得分:3)
类似的东西:blocks.push(和这个对象在这里)
这就是您要做的事情,但是blocks
应该是数组,而不是对象。所以:
let blocks = [];
,然后在构造函数中:
blocks.push(this);
实时示例:
let blocks = []; // <== [], not {}
class Block { // No ()
constructor(X,Y,width,height){
this.X = X;
this.Y = Y;
blocks.push(this);
}
}
new Block(1, 1, 1, 1);
new Block(2, 2, 2, 2);
new Block(3, 3, 3, 3);
console.log(blocks.length); // 3
但是,请注意,这意味着对象(创建的块)将始终保留在内存中,即使最初创建并完成的任何对象都可以保留。通常,您不会让构造函数执行类似的操作,而是将其留给调用方。
答案 1 :(得分:0)
您不能使用push
方法,因为该方法不存在于对象中。当前,您通过以下方式创建了对象:
let blocks = []; // creates object with literal syntax.
push
是仅在数组上可用的方法:
let obj = {};
let arr = [];
console.log(typeof obj.push ); // push not on obj
console.log(typeof arr.push ); // push is on array.prototype
您可以通过从对象文字更改为数组文字来解决它。
let blocks = [];
class Block {
constructor(X,Y,width,height){
this.X = X;
this.Y = Y;
blocks.push(this);
}
}
new Block(1, 2, 3, 4);
new Block(2, 4, 6, 8);
console.log(blocks); // 3