Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 未捕获类型错误:modal.openModal不是函数_Javascript - Fatal编程技术网

Javascript 未捕获类型错误:modal.openModal不是函数

Javascript 未捕获类型错误:modal.openModal不是函数,javascript,Javascript,我试图在JavaScript中从IIFE游戏控制器模块中触发一个模式弹出窗口。模式弹出窗口位于其自己的模块中,并返回所需的功能 我最近才了解了模块,因此我显然遗漏了一些明显的东西,但在花了几个小时盯着我的代码并试图搜索web之后,我正在努力找到解决方案 以下是游戏控制器模块: // Game Controller const gameController = (() => { // Create players let player1 = PlayerFactory(&q

我试图在JavaScript中从IIFE游戏控制器模块中触发一个模式弹出窗口。模式弹出窗口位于其自己的模块中,并返回所需的功能

我最近才了解了模块,因此我显然遗漏了一些明显的东西,但在花了几个小时盯着我的代码并试图搜索web之后,我正在努力找到解决方案

以下是游戏控制器模块:

// Game Controller
const gameController = (() => {

    // Create players
    let player1 = PlayerFactory("Player 1", "images/player.png");
    let player2 = PlayerFactory("Player 2", "images/computer.png");

    // Initialise game variables
    let round = 0;
    let maxRounds = 8;
    let turn = 0;
    let player1Score = 0;
    let player2Score = 0;
    

    // Main game function
    const play = function (e) {
      if (round == maxRounds) {
        // Increment both players' scores
        player1Score++;
        player2Score++;
        // Display modal pop-up for tie
      }
      switch (turn) {
        case 0:
          if (player1.play(e)) {
            e.target.dataset.player = 0;
            round++;
            turn = 1;
            if (checkWinner() == 0) {
              // Increment player 1 score
              player1Score++;
              // Display modal popup for player 1 win
              modal.openModal();
            }
          }
          break;
        case 1:
          if (player2.play(e)) {
            e.target.dataset.player = 1;
            round++;
            turn = 0;
            if (checkWinner() == 0) {
              // Increment player 2 score
              player2Score++;
              // Display modal popup for player 2 win
            }
          }
          break;
          }
      }

    // Check winner function
    const checkWinner = function () {

      // Initialise winner variable
      let gameWinner = '';

      // For loop checking for horizontal wins
      for (i=0; i<9; i=i+3) {
        if (gameBoard.boardArray[i].dataset.player) {
          if ((gameBoard.boardArray[i].dataset.player == gameBoard.boardArray[i+1].dataset.player) && (gameBoard.boardArray[i+1].dataset.player == gameBoard.boardArray[i+2].dataset.player)) {
            gameWinner = gameBoard.boardArray[i].dataset.player;
            return gameWinner;
          }
        }
      }

      // For loop checking for vertical wins
      for (i=0; i<3; i++) {
        if (gameBoard.boardArray[i].dataset.player) {
          if ((gameBoard.boardArray[i].dataset.player == gameBoard.boardArray[i+3].dataset.player) && (gameBoard.boardArray[i+3].dataset.player == gameBoard.boardArray[i+6].dataset.player)) {
            gameWinner = gameBoard.boardArray[i].dataset.player;
            return gameWinner;
          }
        }
      }

      // For loop checking for diagonal wins
      if (gameBoard.boardArray[0].dataset.player) {
        if ((gameBoard.boardArray[0].dataset.player == gameBoard.boardArray[4].dataset.player) && (gameBoard.boardArray[4].dataset.player == gameBoard.boardArray[8].dataset.player)) {
          gameWinner = gameBoard.boardArray[0].dataset.player;
          return gameWinner;
        }
      }

      // For loop checking for diagonal wins
      if (gameBoard.boardArray[2].dataset.player) {
        if ((gameBoard.boardArray[2].dataset.player == gameBoard.boardArray[4].dataset.player) && (gameBoard.boardArray[4].dataset.player == gameBoard.boardArray[6].dataset.player)) {
          gameWinner = gameBoard.boardArray[2].dataset.player;
          return gameWinner;
        }
      }
    }

    // Click event listener to call play function
    window.addEventListener('DOMContentLoaded', (event) => {
      let cells = document.querySelectorAll(".game-cell").forEach(cell => {
        cell.addEventListener("click", play);
      })
    });
    
    return {

    };
})();
当前,当我使用以下行(在游戏控制器中)触发模式弹出窗口时:

我在控制台中收到此错误:

Uncaught TypeError: modal.openModal is not a function
如果有人能在这里提供帮助,我们将不胜感激


谢谢大家!

这是因为
modal
是一个函数,用括号调用它,如下所示

modal().openModal()
检查是否已定义很简单

if (modal.openModal)
    alert("is modal");
else
    alert("isnt modal");
这将警告“is not modal”,因为
modal
是一个函数

if (modal().openModal)
    alert("is modal");
else
    alert("isnt modal");

这将提示“is modal”,这是正确的。

这是因为
modal
是一个函数,用括号调用它,如下所示

modal().openModal()
检查是否已定义很简单

if (modal.openModal)
    alert("is modal");
else
    alert("isnt modal");
这将警告“is not modal”,因为
modal
是一个函数

if (modal().openModal)
    alert("is modal");
else
    alert("isnt modal");

这将提示“是模态的”,这是正确的。

尝试
modal().openModal()
而不是
modal.openModal()
,模态本身是一个函数,需要调用它才能访问openModal()。谢谢@HemantMalik-解决了这个问题,您想提交解决方案吗?真的很感激!:)不,谢谢,干杯!尝试
modal().openModal()
而不是
modal.openModal()
,modal本身就是一个函数,需要调用它才能访问openModal()。谢谢@HemantMalik-已经解决了这个问题,您想提交解决方案吗?真的很感激!:)不,谢谢,干杯!