Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
完全控制多个Javascript对象_Javascript_Function_Constructor - Fatal编程技术网

完全控制多个Javascript对象

完全控制多个Javascript对象,javascript,function,constructor,Javascript,Function,Constructor,我正在用javascript编写一个生成和终止形状的游戏。因此,我需要完全控制这些正在生成的形状。我想做以下几点,但我不确定如何做: 我想定义一个构造函数Shape 然后,我想做一个函数,这样当调用它时,它将应用于所有现存的形状,并且能够更改每个属性。(例如,我调用函数moveAll(),所有形状的this.y都会增加一个。) 我还希望能够使用函数终止特定的形状,或者使用函数添加形状 我的主要问题是: var x = new Shape(); var y = new Shape(); ...

我正在用javascript编写一个生成和终止形状的游戏。因此,我需要完全控制这些正在生成的形状。我想做以下几点,但我不确定如何做:

  • 我想定义一个构造函数
    Shape
  • 然后,我想做一个函数,这样当调用它时,它将应用于所有现存的
    形状
    ,并且能够更改每个属性。(例如,我调用函数
    moveAll()
    ,所有形状的
    this.y
    都会增加一个。)
  • 我还希望能够使用函数终止特定的
    形状
    ,或者使用函数添加
    形状
我的主要问题是:

var x = new Shape();
var y = new Shape();
...
我不想制造一百万个变量。我需要一种方法,使吨的形状一次,仍然能够控制每一个单独的。如果我制作了一个数组,我将如何单独控制所有内容


任何有帮助的,我只需要一个基础来理解构造函数的概念。提前谢谢

您可以制作一组形状:

let shapes = []

// this will create 6 shapes
for(let i of [0,1,2,3,4,5]) {
  shapes.push(new Shape())
}
如果形状具有
id
,则可以终止它:

// incrementing id counter
let id = 0

// x and y are optional starting positions
function Shape(x, y) {
  this.id = id++
  this.y = y || 0
  this.x = x || 0
}

// remove the shape from the array
function terminate(id) {
  shapes = shapes.filter(shape => shape.id !== id)
}

// or add a shape
function spawn() {
  shapes.push(new Shape())
}
现在你有了你的形状

移动所有形状的最简单方法如下:

function moveAll() {
  shapes.forEach(shape => shape.y++)
}
此操作的运行时间将随着形状数量的增加而增加

根据请求更新了
moveAll

旁注:您可能想继续阅读我们的JavaScript书籍/文章,至少要读到数组。如果你需要更多关于构造器的信息-应该让你有一个体面的开始。。。(您可能正在查找相同“类型”的对象的构建列表,但不确定)在moveAll()中,您需要将“shape”更改为“shapes”,否则名称不正确consistent@AssafiCohen-阿拉齐不,我不这么认为。它正在“shapes”数组中的每个“shape”上迭代。那么它不应该大写吗?@AssafiCohen Arazi no.看一看。@AssafiCohen Arazi我可以在回调中将
shape
重命名为
foo
,它仍然可以工作。
function moveAll() {
  shapes.forEach(shape => {
    if(shape.type === true) {
      shape.y++
    } else {
      shape.y--
    }
  })
}