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如果它解决了你的问题,请接受这个答案!