javascript - 创建一个对象的多个实例(通过在其名称中添加递增数字)并添加Child 到阶段
问题描述
我正在使用 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 比较陌生,所以我的术语可能不是很好。提前谢谢了。任何帮助将非常感激!
解决方案
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);
这使您可以轻松控制所需的副本数量,并且不会污染全局命名空间。
推荐阅读
- javascript - How to access the value of a radio button
- python - How to use ctypes' errcheck?
- c++11 - Having some wierd artifacting and odd triangle shadows with SSAO Opengl Implmentation
- jqgrid - 如何从编辑表单在 jqgrid 中发送几个参数
- .net - 当我是唯一的用户时,为什么在 Entity Framework 中会出现并发异常?
- python - python 3: error when dump/load sympy lambdify-epression
- python-3.x - 使用 beautifulsoup 找出 html 中的 data-sold-out="false"
- r - Matching output of sample() with rbinom() in R?
- java - How to make a hashmap of dynamic methods in Java
- sql - 在某些字符后加逗号