You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仿Wordle游戏调用返回函数报错:getData(...).isCorrect不是函数

问题分析与解决方案

核心错误原因

getData()是异步函数,调用后返回的是Promise对象,而非直接包含isCorrect方法的对象。所以getData().isCorrect()相当于在Promise上调用不存在的isCorrect方法,自然抛出错误。

如果去掉getData()的括号,函数根本不会执行,导致API请求、单词池初始化、游戏逻辑函数都不会被创建,游戏自然无法运行。

修复方案(推荐)

提前初始化游戏逻辑,将异步获取的游戏对象保存到全局变量,点击按钮时直接调用已初始化的方法:

1. 修改JavaScript代码

let gameInstance;

// 页面加载时完成游戏初始化
async function initGame() {
  gameInstance = await getData();
}

async function getData() {
  // 处理API返回的JS文件(原接口返回的是JS变量而非JSON)
  const response = await fetch("https://all-wordle-words.kobyk1.repl.co/script.js");
  const text = await response.text();
  // 提取JS文件中的words数组
  const match = text.match(/var words = (\[.*?\]);/);
  if (!match) throw new Error("无法提取单词数据");
  const wordsArray = JSON.parse(match[1]);

  const words = new Set(wordsArray);
  const chosen = wordsArray[Math.floor(Math.random() * wordsArray.length)];

  function check(word) {
    let result = Array(5).fill("gray");
    let chosenChars = [...chosen];
    for (let i = 0; i < 5; i++) {
      if (word[i] === chosenChars[i]) {
        result[i] = "green";
        chosenChars[i] = "G";
      } else {
        for (let j = 0; j < 5; j++) {
          if (word[i] === chosenChars[j]) {
            result[i] = "yellow";
            chosenChars[j] = "Y";
            break; // 找到匹配后退出循环,避免重复标记
          }
        }
      }
    }
    return result;
  }

  function isCorrect() {
    const word = document.getElementById("guess").value.toLowerCase().trim();
    if (word.length !== 5) {
      alert("请输入5个字母的单词!");
      return;
    }

    if (words.has(word)) {
      const result = check(word);
      const element = document.getElementById("guesses");
      element.innerHTML += colorResult(word, result);
      if (chosen === word) {
        alert("恭喜你猜对了!");
      }
      // 清空输入框
      document.getElementById("guess").value = "";
    } else {
      alert("这个单词不在词库中!");
    }
  }

  function colorResult(word, result) {
    word = word.toUpperCase();
    let columns = "";
    for (let i = 0; i < 5; i++) {
      columns += `<td style="background-color: ${result[i]}; padding: 10px; font-size: 1.2em; border: 1px solid #000;">${word[i]}</td>`;
    }
    return "<tr>" + columns + "</tr>";
  }

  return {
    check,
    isCorrect,
    colorResult
  };
}

// 页面加载完成后自动初始化游戏
window.addEventListener("load", initGame);

2. 修改HTML按钮绑定

<button onclick="gameInstance.isCorrect()">Submit</button>

额外优化点

  • 增加输入长度校验,确保用户输入5个字母
  • 修复check函数逻辑漏洞:找到黄色匹配后退出内层循环,避免同一字母被多次标记
  • 提交后清空输入框,提升操作流畅度
  • 给表格单元格添加基础样式,让结果显示更清晰

内容的提问来源于stack exchange,提问作者Koby K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:22:45