javascript - 在 es6 中调用另一个类的函数

标签 javascript class oop model-view-controller ecmascript-6

我的问题很简单。基本上,我有一个 Controller 和一个 View 类。当我点击一个按钮时, Controller 告诉 View 显示一个东西。问题是, Controller 不能。这是代码。

class Controller {

    constructor(view) {
        view = new View();
      
        let button = document.getElementById('button');
        button.addEventListener('click', () => {
            controller.doThing();
        });
    }
    
    doThing() {
        view.drawThing(5, 5);
    }

}

class View {
    
    constructor(controller) {
        let canvas = document.getElementById('canvas');
        let pen = canvas.getContext('2d');
        
        this.controller = Controller;
        this.drawThing = drawThing();
    }

    drawThing(x, y) {
        pen.beginPath();
        pen.moveTo(0, 0);
        pen.lineTo(x, y);
        pen.stroke();
    }

}

其结果是一个

Uncaught TypeError: Cannot read property 'drawThing' of undefined
at Controller.doThing (Controller.js:17)
at HTMLButtonElement.Controller.button.addEventListener (Controller.js:12)

最佳答案

view 变量的范围仅限于构造函数。您应该改用 this.view:

class Controller {

    constructor(view) {
        this.view = new View();

        let button = document.getElementById('button');
        button.addEventListener('click', () => {
            controller.doThing();
        });
    }

    doThing() {
        this.view.drawThing(5, 5);
    }

}

关于javascript - 在 es6 中调用另一个类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41209447/

相关文章:

javascript - Tinymce : How do I get the formatting of my selected node?

c++ - 我应该如何在嵌套类中正确使用友元声明?

java - 如何在Android中使用ormlite实现单例模式

javascript - 构造函数中的订阅

javascript - 有一个表,一个 iframe 和一个并排显示的表

javascript - 计算 ng-repeat Angular JS 表达总数

javascript - 使用 onClick 通过 javascript 更改类

java - 具有集中变量的良好编程实践

javascript - 按钮禁用时如何替换事件处理程序

C++:如何根据用户的输入创建一个类的多个成员?