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