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

$(myObject) memory vs myObject memory - Issue

本文关键字:内存 myObject 问题      更新时间:2023-09-26

我正在编写的某些函数有问题。我的"帆船"是一个具有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"的控制台.log()中,我的位置X和位置Y很好,它们随着我希望它们的变化而变化(我只显示两行,这个"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() 中,位置 Y(或位置 X,取决于我想要改变的值)记住它采用的最后一个值。在这里,位置 Y 将始终为 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。问题是,某些单元格(其中包含一个对象)的 id 是错误的,因为它采用 bateau.positionX & bateau.positionY & bateau.numJoueur。(看起来像"441",用于玩家 1 的单元格 (4,4)。这是完整的工作项目:(见下面的评论,不能发布两个链接)。只需解压缩并在本地加载(linux文件系统)。

干杯克拉奇

我建议将其关闭,因为它是这个问题的欺骗:

循环内的JavaScript闭包 - 简单的实际示例

但原因如下:

这是 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));
    };