我正在写一些函数的问题。我的“bateau”是一个具有x位置和y位置的对象,可以将其放置在我的“格栅”对象中,该对象是“bateau”元素的表格。
Joueur.prototype.placeFullBateau = function(grille, bateau) {
var x = bateau.positionX;
var y = bateau.positionY;
var direction = bateau.direction;
if (direction == "droite") {
for (var i = 0; i <= bateau.taille-1; i++) {
grille.plateau[x][y+i] = $(bateau);
console.log(bateau);
console.log($(bateau));
console.log("Bateau : "+$(bateau).get(0).nom+", positionY : "+grille.plateau[x][y+i].get(0).positionY);
console.log(grille.plateau[x][y+i]);
$(bateau).get(0).positionY += 1;
};
};
在“bateau”的console.log()中,我的位置X&amp; positionY很好,他们改变,因为我希望他们改变(我只显示两行,这个“bateau”需要5):
Object { nom: "Porte-avion", taille: 5, positionX: 4, positionY: 2, direction: "droite" } test.js:100:5
Object { nom: "Porte-avion", taille: 5, positionX: 4, positionY: 3, direction: "droite" } test.js:100:5
在“$(bateau)”的console.log()中,positionY(或positionX,取决于我想要改变的那个)记住它所采用的最后一个值。 这里,positionY将始终为7(因为它从2开始,大小为5)。
我正在努力:
grille.plateau[x][y+i] = $(bateau);
grille.plateau[x][y+i].get(0).positionY = bateau.positionY;
$(bateau).get(0).positionY += 1;
我迷路了.. 希望我提供足够的信息以获得一些帮助..我不会粘贴整个代码:/。
这是一个小提琴:https://jsfiddle.net/0jaL7svo/ 没有真正起作用,缺少当我点击一个单元格时显示的图像。 我正在做的是当我点击一个单元格时,我接受了它的身份。 问题是,一些单元格的id(其中有一个对象)是错误的,因为它需要bateau.positionX&amp; bateau.positionY&amp; bateau.numJoueur。 (对于播放器1的单元格(4,4),看起来像“441”。) 这是完整的工作项目:(见下面的评论,不能发布两个链接)。只需在本地解压缩和加载(linux文件系统)。
干杯 Krach
答案 0 :(得分:0)
我建议将此作为这个问题的背叛:
JavaScript closure inside loops – simple practical example
但这里的理由是:
这是for循环中非常常见的JavasScript闭包问题。您需要在当前通过循环时捕获i
的值,而不仅仅是参考i
:
for (var i = 0; i <= bateau.taille-1; i++) {
(function(i) {
grille.plateau[x][y+i] = $(bateau);
console.log(bateau);
console.log($(bateau));
console.log("Bateau : "+$(bateau).get(0).nom+", positionY : "+grille.plateau[x][y+i].get(0).positionY);
console.log(grille.plateau[x][y+i]);
$(bateau).get(0).positionY += 1;
}(i));
};