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



我正在使用香草JS创建战列舰。

  1. 我有两个类-飞船和游戏板。

  2. 我在类Ship中有一个方法来接受和验证对象坐标=>{x:‘a’,y:2}

  3. 我在GameBoard中也有一个方法,我试图接受一个Ship实例坐标,但我没有做到,因为这些类不相关。

class Ship {
...
updateCoord(x, y) {
...
}
}
class GameBoard {
...

placeShip() { // Will be using this method to place ship within the actual game board.
return Ship.Coord();   
}
}
const battleShip = new Ship("BattleShip", ...);
battleShip.updateCoord("c", 2);

我如何编辑我的代码,以便可以将GameBoard中的方法调用到Ship类创建的实例?

battleShip.placeShip():

这取决于实际合并它们的方式,下面的代码只是一个例子,希望它能像你想要的一样工作

所以我想你想";分配";这艘船到游戏板,意味着游戏板必须知道这艘船。因此这个代码

myGameboard.ship = myNewShip;

完成该任务后,在类Gameboard中,您可以使用this.ship访问它,如下面的示例所示

在引入";船;至";gameBoard";您可以直接使用您的placeShip函数来命令已知的";船;调用实例函数

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();

增强基于提供的关于游戏板的评论应该有一个以上的船

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);

最新更新