Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中,如何从app.js访问位于另一个模块中的模块中的函数?_Javascript_Node.js - Fatal编程技术网

Javascript 在node.js中,如何从app.js访问位于另一个模块中的模块中的函数?

Javascript 在node.js中,如何从app.js访问位于另一个模块中的模块中的函数?,javascript,node.js,Javascript,Node.js,我正在创建一个战舰游戏来学习node.js。在app.js文件中,我基于名为Users的模块创建了两个播放器,该模块导入名为Board的模块。在Board模块中,我有一个名为placeShip的函数。如何从app.js访问此placeShip功能?实际上,我得到了一个类型错误:Player1.placeShip不是一个函数 用户模块: var User = function() { var board = require('./Board'); return { Username: ""

我正在创建一个战舰游戏来学习node.js。在app.js文件中,我基于名为Users的模块创建了两个播放器,该模块导入名为Board的模块。在Board模块中,我有一个名为placeShip的函数。如何从app.js访问此placeShip功能?实际上,我得到了一个类型错误:Player1.placeShip不是一个函数

用户模块:

var User = function() {
var board = require('./Board');
return {
    Username: "",
    Gender: "",
    Player: "",
    Turn: "",
    Ships: {
        Carrier: ['C','C','C','C','C'],
        Battleship: ['B','B','B','B'],
        Cruiser: ['Z','Z','Z'],
        Submarine: ['S','S','S'],
        Destroyer: ['D','D']
    },
    Board: new board,
    Hit: function (ship,position) {
        var x = this.Ships[ship][position];
        if(x != null && x != undefined) {
            this.Ships[ship][position] = 'X';
        }
    },
    OutputAll: function () {
        for (var item in this) {
            if (item == "Ships") {
                console.log("Ships: ");
                for (var ship in this.Ships) {
                    console.log("    " + ship + ": " + this.Ships[ship]);
                }
            } else if(item != "Hit" && item != "OutputAll" && item != "Board") {
                console.log(item + ": " + this[item]);
            }
        }
    }
}
}

module.exports = User;
电路板模块:

var GameBoard = function() {
return {
    Yours: createArray(10),

    Mine: createArray(10),

    ClearBoards: function () {
        this.Yours = createArray(10);
        this.Mine = createArray(10);
    },

    DisplayBoard: function(board){
        for(var i in board){
            console.log(board[i]);
        }
    }
}
}

function createArray(length) {
var table = new Array(length);

for (var i = 0; i < length; i++) {
    table[i] = new Array(length);
    // Make each space a 0
    for (var row = 0; row < length; row++) {
        table[i][row] = 0;
    }
}
return table;
}

function placeShip(ship,rowStart,rowEnd,colStart,colEnd) {
var letter;

//=====Get Ship Letter======
for (x = 0; x < ship.length; x++) {
    if (ship[x] != 'X') {
        letter = ship[x];
        break;
    }
}

//=====Get Orientation=======
// Ship is horizontal
if (rowStart === rowEnd) {
    // Put the ship letter where it lies
    for (x = colStart; x <= colEnd; x++) {
        this.Board.Mine[rowStart][x] = letter;
    }
}
// Or Ship is vertical
else if (colStart === colEnd) {
    // Put the ship letter where it lies
    for (x = rowStart; x <= rowEnd; x++) {
        this.Board.Mine[x][colStart] = letter;
    }
}
// Or Ship is diagonal
else {
    // Put the ship letter where it lies
    this.Board.Mine[rowStart][colStart] = letter;
    for (x = 0; x < ship.length; x++) {
        this.Board.Mine[rowStart + 1][colStart + 1] = letter;
    }
}
}

module.exports = GameBoard;
module.exports.placeShip = placeShip; 

app.js可以创建对child1、child2等的引用。此引用将允许对child的函数调用

app.js还可以“监听”child1、child2等中触发的事件

  window.addEventListener('child1.event1', function() { $ref.child2.func2(options)}
可传递的呼叫链是:


child1可以通过在其父级(app.js)中激发dispatcher正在侦听的事件来调用其同级函数。

我们需要在用户模块中使用board模块,因此最好的方法是将board模块作为参数传递给用户,并在主文件app.js中同时要求这两个模块 app.js:

var board = require("./public/scripts/board");
var Users  = require("./public/scripts/Users")(board);
用户模块

var User = function(board){
  return{
    Board: new board;
  }
}

将placeShip函数移到Board函数中,并将this.Board.Mine更改为this.Mine

不确定,但尝试将“/Board”替换为“Board.js”。我可以访问Board模块,因为我可以执行Player1.Board.DisplayBoard,它会显示板。一旦我添加了placeShip函数,这是不可能的。请尝试在主js文件中要求使用board模块。但是如果我调用placeShip,则此调用方将不是玩家,因此它不会更新玩家的board。将placeShip也作为函数包含在gameboard return中并删除exports.exports.placeShip我如何在app.js中引用child 2?据我所知,我需要调用方是一名玩家,以便玩家的棋盘可以更新。有关更多详细信息,请参阅此,我可以在用户模块中使用棋盘模块,就像我可以使用Player1.DisplayBoard()一样,它会显示棋盘。我不能做的是访问board模块中的函数placeShip。我尝试将函数移动到board函数中以在属性中生成,但是我得到的placeShip没有定义
var User = function(board){
  return{
    Board: new board;
  }
}