Javascript Typescript私有方法“;不是一个函数;
我可能误解了一些概念,但在阅读了有关stackoverflow的4个主题和“typescript中的私有成员”的文档之后,我仍然感到困惑 我正在编写简单的鼠标IO(第一个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
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));
我投票决定结束这个问题,因为这个错误在低技能世界很常见,我发现了错误所在。我投票决定结束这个问题,因为这个错误在低技能世界很常见,我发现了错误所在。