创建一个对象的多个实例(通过向其名称添加增量数字)并将 addChild 添加到舞台

Create multiple instances of an object (by adding incremental numbers to it's name) and addChild to stage

我正在使用 Canvas/javascript (createjs),但在调用实例或将子项添加到克隆形状的阶段时遇到困难(通过使用 for 循环添加递增数字的数组)。

var myShape = new createjs.Shape();
myShape.graphics.f("white").rr(0, 0, 300, 300, 12);

myShape1 = myShape.clone();
myShape2 = myShape.clone();
myShape3 = myShape.clone();

//var arr = [null,cellFlasha1, cellFlasha2, cellFlasha3, cellFlasha4];

var arr = [];
for (var i = 1; i <= 4; i++) {
     arr.push(["myShape"+i]);
}

stage.addChild(arr[1]);

我似乎无法在舞台上添加实例。当我使用已被注释掉的数组时它确实有效。当我将字符串和值作为对象推送到数组时,这可能是我如何组合字符串和值吗?

我知道我可以通过 stage.addChild(myShape1) 将它添加到舞台上;等等..但我想通过一个循环来完成它,因为会有更多的实例和类似的场景(我打算循环我如何添加克隆所以对象的数量可以只定义一次)

我对 javascript 比较陌生,所以我的术语可能不太好。提前谢谢了。任何帮助将不胜感激!

是的,您可以使用 "window" 全局对象执行此操作。像这样

for(var i=1; i<=4; i++) {
    window['myShape'+i] =  myShape.clone();
}
var arr = [];
for (var i=1; i<= 4; i++) {
     arr.push(window['myShape'+i]);
}

您可以在此处查看更多详细信息: Use dynamic variable names in JavaScript

Muzaffar 是正确的,您可以通过 window 对象访问这些变量,但是对于这种事情依赖全局变量通常是一种代码味道。您需要将任意数量的这些形状放入数组中吗?如果是这样,为什么不尝试这样的事情呢?

function cloneShapeIntoArray(shape, num) {
  var shapeArray = [];

  for (var i = 0; i <= num; i++) {
    shapeArray.push(shape.clone());
  }

  return shapeArray;
}

function addShapesToStage(shapes, stage) {
  for (var i = 0; i <= shapes.length; i++) {
    stage.addChild(shapes[i]);
  }
}

var myShape = new createjs.Shape();
myShape.graphics.f("white").rr(0, 0, 300, 300, 12);

var shapes = cloneShapeIntoArray(myShape, 3);

// You can do some extra stuff to the shapes here, eg you could make each one a different scale
// shapes[0].scale = 1
// shapes[1].scale = 1.5
// shapes[2].scale = 2

addShapesToStage(shapes, stage);

这使您可以轻松控制所需的副本数量,并且不会污染全局命名空间。