Javascript 为数组元素赋值';s属性设置所有其他类似元素';财产
我创建了一个数组和一个名为Block的类。现在,在数组中创建2个对象并将blockArray[0]的x属性更改为不同的数字后,blockArray[1]的x也将更改为类似于blockArray[0]的x值,而不是保留初始值100 我做错了什么?如何更改blockArray[0]的x而不影响数组中的其他对象 编辑:Javascript 为数组元素赋值';s属性设置所有其他类似元素';财产,javascript,arrays,Javascript,Arrays,我创建了一个数组和一个名为Block的类。现在,在数组中创建2个对象并将blockArray[0]的x属性更改为不同的数字后,blockArray[1]的x也将更改为类似于blockArray[0]的x值,而不是保留初始值100 我做错了什么?如何更改blockArray[0]的x而不影响数组中的其他对象 编辑: 更新了代码。segments是带有块元素的数组。修复了此问题,谢谢。Norguard和Mark Reed的评论让我找到了错误的代码部分(我忘了在我的帖子中包含) 做: function
更新了代码。segments是带有块元素的数组。修复了此问题,谢谢。Norguard和Mark Reed的评论让我找到了错误的代码部分(我忘了在我的帖子中包含) 做:
function Block(){
this.x = 100;
this.y = 100;
}
// update canvas
function UpdateCanvas(){
// check if game is still on going
if (!isStopped)
{
for(var i = segments.length - 1; i > 0 ; i--)
{
segments[i] = segments[i - 1];
}
switch(direction)
{
case "left":
segments[0].x = segments[0].x - pixelChange;
DrawCanvas();
break;
case "right":
segments[0].x = segments[0].x + pixelChange;
DrawCanvas();
break;
case "up":
segments[0].y = segments[0].y - pixelChange;
DrawCanvas();
break;
case "down":
segments[0].y = segments[0].y + pixelChange;
DrawCanvas();
break;
}
}
}
将段[i-1]的引用保存到段[i],而不是保存对象。给我上了一课。是的,没什么问题,你确定你有问题吗?我的问题还是解决不了。顺便说一句,浏览器是chrome浏览器,但我的代码中没有特定于浏览器的内容:/I我感觉您使用了一个
for
循环来完成此操作。在这种情况下,您会遇到关闭问题。到底什么是闭包问题取决于你在for循环中做了什么。但是你是如何初始化块数组的呢?发生的情况是,您以某种方式获得了对数组中同一对象的多个引用。我们可以告诉你,如果你给我们看实际的代码。
for(var i = segments.length - 1; i > 0 ; i--){
segments[i] = segments[i - 1];
}