JavaScript -给定2个类(A和B),如何从类B调用方法到类A的示例?

wlp8pajw  于 2022-12-10  发布在  Java
关注(0)|答案(2)|浏览(147)

我正在使用香草JS创建战舰。
1.我有2类-船舶和游戏板。
1.我在类Ship中有一个方法来接受和验证对象坐标=〉{ x:'a',y:2}
1.我也有一个方法在游戏板,我试图接受一个船舶示例坐标,但我失败了,因为这些类不相关。
第一个
我如何编辑我的代码,以便从GameBoard调用一个方法到类Ship创建的示例?

battleShip.placeShip():
qv7cva1a

qv7cva1a1#

这取决于你想如何实际合并他们,下面的代码只是例子,希望它的工作方式一样,你想要的
所以我假设你想把这艘船“分配”给游戏板,这意味着游戏板必须知道这艘船。

myGameboard.ship = myNewShip;

赋值之后,在类Gameboard中,可以使用this.ship访问它,如下例所示
在将“ship”引入“gameBoard”之后,您可以直接使用placeShip函数,通过调用该示例函数命令已知的“ship”去某个地方

class Ship {
    updateCoord = (x, y) => {
      console.log({x, y});
    }
}

class GameBoard {       
    placeShip(x, y) {
        return this.ship.updateCoord(x,y);   
    }
}

myNewShip = new Ship();
myGameBoard = new GameBoard();

myGameBoard.ship = myNewShip;

myGameBoard.placeShip(1,2);

当你想以另一种方式调用它时,这也是同样的工作方式,我刚刚意识到,根据你在问题上显示的最后一段代码,这可能是你想要的方式。

class Ship {
    updateCoord = (x, y) => {
      console.log({x, y});
    }
    // roundabout way code
    placeShip = () => {
      this.gameBoard.ship = this;
      this.gameBoard.placeShip();
    }
}

class GameBoard {       
    placeShip() {
        console.log("Call your function");   
    }
}

myNewShip = new Ship();
myGameBoard = new GameBoard();

// assigning a gameboard to your ship
myNewShip.gameBoard = myGameBoard;

// Direct Way
myNewShip.gameBoard.placeShip();
// Roundabout Way
myNewShip.placeShip();

增强基于对gameBoard提供的评论应该有1艘以上的船

class Ship {
    updateCoord = (x, y) => {
      console.log({x, y});
    }
}

class GameBoard {       
    placeShip(ship) {
        // If no need to create outside, can create here actually, and remove the param
        // ship = new Ship();
        
        // randomize x & y and add other logic if necessary
        let x = 0; 
        let y = 0;
        ship.updateCoord(x, y);
        //two way connection between ship and gameboard
        ship.gameBoard = ship; 
        return this.ships.push(ship);
    }
}

myGameBoard = new GameBoard();
myGameBoard.ships = [];
ship1 = new Ship();
ship2 = new Ship();
ship3 = new Ship();
myGameBoard.placeShip(ship1);
myGameBoard.placeShip(ship2);
myGameBoard.placeShip(ship3);
2nc8po8w

2nc8po8w2#

我们可以用这种方式调用这两个方法。
第一个

相关问题