Javascript 如何将Eventlistener添加到实例方法

Javascript 如何将Eventlistener添加到实例方法,javascript,canvas,ecmascript-6,addeventlistener,Javascript,Canvas,Ecmascript 6,Addeventlistener,我有一个类,每当发生事件时,我都想在其中运行一个函数。每当函数调用时,类实例的函数都不会运行 职业玩家{ 构造函数(){ window.addEventListener('keypress',this.key_press); 按下此键=0; } 按键(按键){ 如果(按键=w){ 控制台日志(按键); 按下此键+=1; } console.log(按下此键); } } 每当调用此键时,它都会注销。似乎类的方法没有运行,而是一个副本(?)。我还尝试在key\u press()中运行另一个实例函数

我有一个类,每当发生事件时,我都想在其中运行一个函数。每当函数调用时,类实例的函数都不会运行

职业玩家{
构造函数(){
window.addEventListener('keypress',this.key_press);
按下此键=0;
}
按键(按键){
如果(按键=w){
控制台日志(按键);
按下此键+=1;
}
console.log(按下此键);
}
}
每当调用此键时,它都会注销。似乎类的方法没有运行,而是一个副本(?)。我还尝试在
key\u press()
中运行另一个实例函数,但它表示该函数未定义


感谢您的帮助

将事件侦听器添加到
窗口
或DOM的任何元素时,
值指向该元素,而不是
播放器
实例

因此,您得到的是
NaN
,因为
窗口
没有
keys\u pressed
属性,并且
keys\u pressed+=1
被视为
keys\u pressed=undefined+1

要解决此问题,我们需要显式地将
绑定到
播放器
实例:

const input=document.querySelector(“输入”);
职业选手{
构造函数(){
input.addEventListener('keypress',this.key_press.bind(this));
按下此键=0;
}
按键(按键){
如果(按键=w){
按下此键+=1;
}
console.log(按下此键);
}
}
设p=新玩家()

在此处键入:
这里是使用onkeypress和bind的另一种解决方法

职业玩家{
构造函数(输入){
input.onkeypress=this.onkeypress.bind(this);
按下此键=0;
}
onkeyPress(事件){
event.key==“w”?此.keys_按下++:此.keys_按下;
console.log(按下此键);
};
}
const input=document.querySelector(“输入”);
设p=新玩家(输入)

在此处键入:
根据我的观点,NaN来自这一行
console.log(按下此键)当代码正常工作时。检查这里:@Sealestr如果它解决了你的问题,请接受这个答案!