javascript - 井字游戏的 Javascript 对象
问题描述
在这里完成关于 Javascript 主题的新手。我正在尝试编写井字游戏,同时使用 JS 的对象来节省代码空间。我想我可能会创建一个 JS 对象,它将 HTML 代码中定义的所有 9 个字段以 ids 'one' 到 'nine' 作为值,然后还有一个自定义方法可用于交换 value 的 textContent,如下所示:
var fields = {
one: document.querySelector('#one'),
two: document.querySelector('#two'),
three: document.querySelector('#three'),
four: document.querySelector('#four'),
five: document.querySelector('#five'),
six: document.querySelector('#six'),
seven: document.querySelector('#seven'),
eight: document.querySelector('#eight'),
nine: document.querySelector('#nine'),
swap: function(element) {
if (this.element.textContent === "") {
this.element.textContent = "X";
} else if (this.element.textContent === "X") {
this.element.textContent = "O";
} else {
this.element.textContent = "";
}
}
}
然后,我想我会像这样添加一堆 addEventListeners:
fields['one'].addEventListener('click', fields.swap(fields['one']));
问题是,我可能完全把这个概念当作它在 Python 中运行的方式来对待,而且我可能在这里弄乱了语法。谁能给我一些关于我在哪里出错的想法?
上面复制的代码目前不起作用。
它使用的 HTML 如下(我在这里省略了格式以节省空间):
<body>
<div class="container">
<table id="gameboard">
<tr class="row">
<td id="one" class="gameField">X</td>
<td id="two" class="gameField">X</td>
<td id="three" class="gameField">X</td>
</tr>
<tr class="row">
<td id="four" class="gameField">X</td>
<td id="five" class="gameField">X</td>
<td id="six" class="gameField">X</td>
</tr>
<tr class="row">
<td id="seven" class="gameField">X</td>
<td id="eight" class="gameField">X</td>
<td id="nine" class="gameField">X</td>
</tr>
</table>
</div>
解决方案
将你的交换功能从你的对象中分离出来,然后一起摆脱这个对象。将一个类添加到您希望添加 EventListener 的所有 HTMLElement,然后使用以下命令查询它们:
<div id="one" class="your-class"></div>
<div id="two" class="your-class"></div>
function swap(element) {
if (element.textContent === ""){
element.textContent = "X";
}else if (element.textContent === "X") {
element.textContent = "O";
}else {
element.textContent = "";
}
}
document.querySelectorAll('.your-class').forEach(function (element) {
element.addEventListener('click', swap(element));
});
推荐阅读
- c# - c# 中 CosmosDB DocumentDB 和 SqlAPI 的性能下降
- c# - 如何使用 Unity 在 Prism 中使用同一实例注册服务?
- for-loop - jmeter中的jsr223后处理器中的条件Json表达式和for循环
- c - 如何比较两个不同字符串中的每个字符?
- regex - 正则表达式匹配以动态字符串开头的字符串
- java - 引诱报告:使用 Citrus 编写的失败测试显示为“破碎”
- java - 如果生产者在不同的服务中,消费者可以使用 Reactor Kafka 减慢生产者的速度吗?
- angularjs - JPA 未插入连接表
- javascript - 如何添加对象数组属性?
- python - python中字符串比较的最快方法