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

使用对象工厂创建的Player1对象名称为空,点击按钮无法在游戏显示器中显示玩家名称的技术问题

问题分析与修复方案

你遇到的问题核心在于对象创建的时机不对:

当页面刚加载完成时,你就立刻执行了const Player1 = PlayerFactory(Player1TextBox.value.toString(), "X");,这时候用户还没在输入框里输入任何名字,Player1TextBox.value自然是空字符串。所以后续点击按钮调用getName()时,返回的就是这个初始的空值。

修复代码

只需要把创建Player1的逻辑移到点击事件的回调函数里,确保只有用户点击按钮时,才读取输入框的当前值并创建对象:

const Player1TextBox = document.querySelector("#player-1-textbox");
const Player2TextBox = document.querySelector("#player-2-textbox");
const startBtn = document.querySelector("#start-btn");
const gameDisplayer = document.querySelector("#game-displayer");

// 不要在这里提前创建Player1,而是在点击时创建
function displayName() {
  // 点击按钮时才读取输入框的值,创建Player对象
  const Player1 = PlayerFactory(Player1TextBox.value.toString(), "X");
  gameDisplayer.innerText = `${Player1.getName()}, it's your turn!`;
}

startBtn.addEventListener("click", displayName);

function PlayerFactory(name, sign) {
  const getName = () => {
    return name;
  };
  const getSign = () => {
    return sign;
  };
  return { getName, getSign };
}

额外优化建议

  • 可以加个判断,如果用户没输入名字,给出提示(比如显示"Please enter player 1's name!"),避免显示空名称的提示。
  • 如果需要保留Player1对象供后续使用,可以把它声明在全局作用域,在点击时重新赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:57:40