【问题标题】:Calling Javascript function in class on Click event [duplicate]在单击事件的类中调用 Javascript 函数 [重复]
【发布时间】:2021-05-12 01:09:07
【问题描述】:

我正在尝试使用类在纯 javascript 中编写一些代码。我可以在 React 和 JQuery 中轻松做到这一点,并且无需类,但我真的很难理解我在纯 javascript 类中遇到的问题。

这是我的代码:

class Game {
  constructor() {
    this.balls = []
    for (let i = 1; i <= 80; i++) {
      this.balls.push(i)
    }
  }
  getBall() {
    // https://stackoverflow.com/a/4960020/3482632
    const ball = Math.floor(Math.random() * 80) + 1
    this.balls = this.balls.filter(n => n !== ball)
    return ball
  }
  drawBall(e) {
    const ball = this.getBall()
    console.log("ball drawn: " + ball)
  }
}

let g = new Game()
g.drawBall()
//const drawBallButton = document.getElementById("draw_ball")
//drawBallButton.onclick = g.drawBall

编写的代码工作正常,但我希望 drawBall 在按钮单击时触发。如果我注释掉 g.drawBall 代码并取消注释最后两行,drawBall 触发就好了,但是我得到以下错误:

未捕获的类型错误:this.getBall 不是函数 在 HTMLButtonElement.drawBall

我尝试将点击处理程序放在构造函数中,但没有任何区别。我做错了什么?

TIA

【问题讨论】:

    标签: javascript es6-class


    【解决方案1】:

    您将 drawBall 作为常规函数调用,因此缺少 this 上下文。

    试试这个:

    const drawBallButton = document.getElementById("draw_ball");
    drawBallButton.onclick = () => g.drawBall();
    

    【讨论】:

    • 在javascript中添加更多关于this的信息:medium.com/better-programming/…
    • 我不知道为什么这个问题被编辑了,因为之前回答的问题没有帮助,但是@Guerric-p 的答案是正确的,正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2018-12-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多