如何在javascript类中正确设置变量的新值
我想检查requestAnimationFrame函数中变量的值。 我在滚轮事件上实现此值。这似乎有效,但当我检查我的RAF函数中的值时,它仍然设置为第一个值 我想知道如何正确设置this.deltaY值?多谢各位如何在javascript类中正确设置变量的新值,javascript,Javascript,我想检查requestAnimationFrame函数中变量的值。 我在滚轮事件上实现此值。这似乎有效,但当我检查我的RAF函数中的值时,它仍然设置为第一个值 我想知道如何正确设置this.deltaY值?多谢各位 class MyClass { constructor () { this.deltaY = 0; } init () { this.playRAF(); window.addEventL
class MyClass
{
constructor ()
{
this.deltaY = 0;
}
init ()
{
this.playRAF();
window.addEventListener('wheel', function(e) {
this.deltaY = e.deltaY;
console.log(this.deltaY);
// it returns a number
});
}
playRAF ()
{
this.leRaf = requestAnimationFrame(this.playRAF.bind(this));
console.log(this.deltaY);
// it returns 0 all the time despite the function above :(
}
}
//////
const foo = new MyClass();
foo.init();
这是一个问题
请注意这个块,在事件侦听器回调中,this
是窗口,而不是您认为的类实例
window.addEventListener('wheel',函数(e){
this.deltaY=e.deltaY;
console.log(this.deltaY);
//它返回一个数字
});
尝试检查值window.deltaY
,您会发现它是您记录的号码,或者尝试断点调试,函数(e){}
中的this
是window
对象
把它变成
window.addEventListener('wheel',(e) => {
this.deltaY = e.deltaY;
console.log(this.deltaY);
// it returns a number
});
将解决此问题,因为箭头不会创建函数块,这将是预期的类实例。在此处使用箭头函数:window.addEventListener('wheel',e=>{}
@adiga,谢谢你的回答。不幸的是,这个问题与我的事件侦听器中的内容无关,而是与我的playRAF函数中的值有关。另外,我不想使用self,因为我将有几个类的实例。你的事件侦听器肯定是个问题。如果没有arrow函数,它将不会设置.deltaY=e.deltaY
到实例。由于您有一个this.playRAF()
外部,我假设类的实例调用了init
。此外,您可能需要调用this.playRAF()
在事件侦听器中,如果您希望在每次wheel
事件发生时调用该函数。谢谢您的回答。playRAF()是一个请求动画帧函数。因此,它在第一次调用时就一直被调用。是的,我使用实例调用了我的init()函数。因为我用箭头更改了addEventListener,所以我的console.log(this.deltaY)返回“undefined”,似乎它不再可访问。