【发布时间】:2017-08-13 19:43:09
【问题描述】:
我正在尝试制作一个非常非常简单的台球游戏来练习 JQuery OOP。我开始了;我有这个代码:
//Main ball "class"
function createBall(number, color){
this.number = number;
this.color = color;
}
$color = ["noColor", "yellow","blue","red","purple","orange","green"...];
$ball1 = new createBall(1, $color[1]);
$ball2 = new...
但是,我不想逐个球创建一个对象,所以我尝试使用for;像这样工作的东西:
for(var $i = 1; $i <= 15; $i++){
ball+$i = new createBall($i, $color[i]);
}
显然,我无法使用“ball+$i”命名新对象。我正在尝试实现这一目标,因为我想稍后使用“ball1.color = 'red'...”并更改对象属性等。
现在的工作方式是这段代码:
$ballArray[] = new Array;
for(var $i = 1; $i <= 15; $i++){
$ballArray[$i] = new createBall($i, $color[i]);
}
如果我调用$ballArray[1].color,它应该返回"yellow";但我不确定“$ballArray[1]”是否实际上是对象名称,或者每次我“调用”这个对象属性并生成一个新属性时,它是否会调用createBall() 函数。这可能会创建大量的对象,那是不行的。我做对了吗?还是有其他方法可以正确地做到这一点?
最后,我只是想创建并命名所有的球对象,而不是一个一个地做,以防我以后需要创建100个对象。
希望我的解释正确。 欢迎提出所有建议 :)
【问题讨论】:
-
new在您的代码中为每个数组对象调用一次。new返回一个createBall的实例,该实例存储在数组中。当您想要存储许多相同类型的项目时,数组通常是正确的选择。顺便说一句,要遵循 OOP,您的类可能应该称为Ball,而不是createBall。创建发生在new,对象是Ball。 -
嗯,你在正确的轨道上,但你的 for 循环从 1 开始,数组从 0 开始索引。我会说
for (var $i = 0; $i < 15; $i++),然后说$ballArray[$i] = new createBall($i + 1, $color[$i]);。至于你关于它是对象名称的问题,我不确定你在问什么,但我可以说,任何时候你使用new关键字,它都会返回一个对象。所以在这种情况下,$ballArray的每个元素实际上都是一个球对象,具有在创建时指定的属性。 -
另外,@JeffB 提到类名的 +1 应该是
Ball而不是createBall。createBall可以是返回new Ball(number, color)的函数,但类本身应该被称为Ball。我用完了字符来提及 xD -
您还可以将
[]作为$ballArray的变量名的一部分,在Javascript 中您只需说$ballArray = new Array,或者$ballArray = [];旁注——这些都不是jQuery代码,这都是纯 JavaScript -
非常感谢!我制作了一个快速数组,这就是它以 1 开头的原因。关于 JQuery 的事情,写了因为我稍后在代码中使用 $(...).stuff ,但你是对的。我会继续尝试制作这个程序,并清除我的代码。也许我不需要像我想的那样为每个对象命名(就像@Rory-McCrossan 在答案中所说的那样);只是数组。