$(myObject)内存vs myObject内存 - 问题

时间:2016-02-17 11:29:21

标签: javascript jquery

我正在写一些函数的问题。我的“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;

console results

我迷路了.. 希望我提供足够的信息以获得一些帮助..我不会粘贴整个代码:/。

这是一个小提琴:https://jsfiddle.net/0jaL7svo/ 没有真正起作用,缺少当我点击一个单元格时显示的图像。 我正在做的是当我点击一个单元格时,我接受了它的身份。 问题是,一些单元格的id(其中有一个对象)是错误的,因为它需要bateau.positionX&amp; bateau.positionY&amp; bateau.numJoueur。 (对于播放器1的单元格(4,4),看起来像“441”。) 这是完整的工作项目:(见下面的评论,不能发布两个链接)。只需在本地解压缩和加载(linux文件系统)。

干杯 Krach

1 个答案:

答案 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));
    };