Javascript - 对象字段未定义

标签 javascript class ecmascript-6

我会尝试只发布我的程序的重要部分。如果需要更多代码,请告诉我。

ma​​in.html

<html>
    <head>
        <title>Mathematician</title>
        <meta charset=UTF8 />
    </head>

    <body>
        <span id=player_information>
        </span>

        <hr />

        <span id=exercises>
        </span>
    </body>
    <script src="script.js"></script>
</html>

script.js(压缩版)

class Exercises
{
    constructor(player, number_of_exercises)
    {
        this.player = player;
        this.exercises = [];
        for (var i = 0; i < number_of_exercises; i++)
        {
            var exercise = new Exercise();
            var exercise_display = document.createTextNode(exercise);
            var input_field = document.createElement("input");
            var list_element = [exercise, exercise_display, input_field];
            this.exercises.push(list_element);
        }
    }

    display()
    {
        var exercises_area = document.getElementById("exercises");
        for (var i = 0; i < this.exercises.length; i++)
        {
            exercises_area.append(this.exercises[i][1]);
            exercises_area.append(this.exercises[i][2]);
            exercises_area.append(document.createElement("br"));
        }
        var check_button = document.createElement("button");
        check_button.innerHTML = "Check";
        check_button.onclick = this.check_exercises; 
        exercises_area.append(check_button);
    }

    check_exercises()
    {
        for (var i = 0; i < this.exercises.length; i++)
        {
            if (this.exercises[i][0].check_guess(this.exercises[i][2].value)) {
                alert("That was wright!");
            }
        }
    }
}

...

var player = new Player();
player.display();
var exercises = new Exercises(player, 10);
exercises.display();

该程序生成练习并显示它们,其中包含文本和输入字段,您可以在其中输入解决方案。如果我单击检查按钮,我会收到以下错误消息:

TypeError: this.exercises is undefined

我的赌注是什么?我试图弄清楚,但这个错误消息对我来说没有意义。

最佳答案

在构造函数中,您希望将 this 绑定(bind)到您的 display 和 check_exercises 函数。

尝试:

constructor(player, number_of_exercises)
{
    ...code...

    this.check_exercises = this.check_exercises.bind(this)
    this.display = this.display.bind(this)
}

“right”的拼写也没有“w”;)

关于Javascript - 对象字段未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51670917/

相关文章:

javascript - 为什么在 Jest 中分支没有被 rest 参数覆盖?

javascript - 如何迭代无序列表以获取 LI 元素的内部文本的 console.log

C++:模板成员函数,如 template<typename T> int foo<T>()

python - 调用使用类中另一个方法的变量的方法

python - 在没有冗余代码/文档字符串的情况下转发/重定向 python 类中的方法/属性的最佳方法?

javascript - 为什么setState后State不变

javascript - 用 Lodash 克隆的两个数组,分开但相同。为什么?

javascript - 如何访问 div 内的跨度以删除样式?

php - 使用 Jquery 和 Ajax 动态填充表单

javascript - 使用 | 比较多个值