将按钮绑定到 Dice 类

Binding a button to a Dice Class

提问人:HarrySIV 提问时间:10/19/2021 更新时间:10/19/2021 访问量:64

问:

我正在尝试创建一类与D&D完全相同的骰子组,这样一来,按下按钮,我就可以掷出骰子并将其记录到控制台。我以为这将是一件非常简单的事情,但我肯定缺少一些东西。这是我目前所拥有的。

class Dice {
  constructor (sides) {
  this.sides = sides;
  }
  roll () {
    console.log(Math.floor(Math.random() * this.sides) + 1);
}}
const d4 = new Dice (4);
const d6 = new Dice (6);
const d8 = new Dice (8);
const d10 = new Dice (10);
const d12 = new Dice (12);
const d20 = new Dice (20);
const d100 = new Dice (100);

const btn = document.getElementById('button');
btn.onclick = d20.roll;

我目前得到“NaN”,我想我理解它“this”指的是按钮按下,而不是 d20 对象,因此“sides”属性是未定义的,给了我一个未定义的答案。我想也许我必须把“这个”与班级联系起来,做类似的事情

btn.onclick = d20.roll.bind(this);

但我仍然得到 NaN......我不确定此时发生了什么。

按钮 绑定

评论


答:

1赞 HarrySIV 10/19/2021 #1

哇,经过一个小时的尝试,我解决了我自己的问题......我只是将滚动方法更改为箭头函数。

roll = () => {
    console.log(Math.floor(Math.random() * this.sides) + 1);
}

现在我得到了预期的结果,而无需绑定按钮。谁知道呢......