我正在使用香草JS创建战列舰。
-
我有两个类-飞船和游戏板。
-
我在类Ship中有一个方法来接受和验证对象坐标=>{x:‘a’,y:2}
-
我在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);