Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript私有方法“;不是一个函数;_Javascript_Typescript_Private - Fatal编程技术网

Javascript Typescript私有方法“;不是一个函数;

Javascript Typescript私有方法“;不是一个函数;,javascript,typescript,private,Javascript,Typescript,Private,我可能误解了一些概念,但在阅读了有关stackoverflow的4个主题和“typescript中的私有成员”的文档之后,我仍然感到困惑 我正在编写简单的鼠标IO(第一个typescript项目)。这是发生故障的鼠标类的完整代码: class Mouse { public left: MouseKeyData = new MouseKeyData(); public right: MouseKeyData = new MouseKeyData(); public whel

我可能误解了一些概念,但在阅读了有关stackoverflow的4个主题和“typescript中的私有成员”的文档之后,我仍然感到困惑

我正在编写简单的鼠标IO(第一个typescript项目)。这是发生故障的鼠标类的完整代码:

class Mouse {
    public left: MouseKeyData = new MouseKeyData();
    public right: MouseKeyData = new MouseKeyData();
    public whell: MouseKeyData = new MouseKeyData();

    public x: number = 0;
    public y: number = 0;

    private crossBrowserButton(e: any):string {
        switch (e.button) {
            case 0: return 'left';
            case 1: return 'whell';
            case 2: return 'right';
            case 3: return 'back';
            case 4: return 'forward';
        }
        return 'none';
    }


    private onMouseDown(e: any):void {
        let target: MouseKeyData = this.left;
        try {console.log(this.crossBrowserButton(e))} catch (a) {console.warn(a)} finally {}
        if(target) {
            target.press();
        }
    }

    private onMouseUp(e: any):void {
        let target: MouseKeyData = this.left;
        if(target) {
            target.release();
        }
    }

    private onMouseMove(e: any): void {
        this.x = e.pageX;
        this.y = e.pageY;
    }

    public constructor() {
        let anchor = document.body;

        anchor.addEventListener('mousedown', this.onMouseDown);
        anchor.addEventListener('mouseup', this.onMouseUp);
        anchor.addEventListener('mousemove', this.onMouseMove);

    }
}
我以前在
onMouseDown
onmousedup
中调用
this.crossBrowserButton(e)
,但我只得到了
this.crossBrowserButton不是一个函数(…)

我想我在某些地方丢失了
这个
范围,但是
这个。左
工作得很好


提前谢谢

好吧,我想出来了:我在event中将
这个
绑定到document.body,然后-我在方法中使用了这个
这个


谢谢你的评论。各位晚安

好吧,我想出来了:我在event中将
这个
绑定到document.body,然后-我在方法中使用了这个
这个


谢谢你的评论。各位晚安

听起来你做的和你应该做的完全相反。在原始代码中,事件侦听器的执行范围存在问题。它们不绑定到类的作用域,因此将在运行它们的上下文中执行

您的事件绑定应该如下所示

    anchor.addEventListener('mousedown', this.onMouseDown.bind(this));
    anchor.addEventListener('mouseup', this.onMouseUp.bind(this));
    anchor.addEventListener('mousemove', this.onMouseMove.bind(this));

听起来你做的和你应该做的完全相反。在原始代码中,事件侦听器的执行范围存在问题。它们不绑定到类的作用域,因此将在运行它们的上下文中执行

您的事件绑定应该如下所示

    anchor.addEventListener('mousedown', this.onMouseDown.bind(this));
    anchor.addEventListener('mouseup', this.onMouseUp.bind(this));
    anchor.addEventListener('mousemove', this.onMouseMove.bind(this));

我投票决定结束这个问题,因为这个错误在低技能世界很常见,我发现了错误所在。我投票决定结束这个问题,因为这个错误在低技能世界很常见,我发现了错误所在。