如何在javascript类中正确设置变量的新值

如何在javascript类中正确设置变量的新值,javascript,Javascript,我想检查requestAnimationFrame函数中变量的值。 我在滚轮事件上实现此值。这似乎有效,但当我检查我的RAF函数中的值时,它仍然设置为第一个值 我想知道如何正确设置this.deltaY值?多谢各位 class MyClass { constructor () { this.deltaY = 0; } init () { this.playRAF(); window.addEventL

我想检查requestAnimationFrame函数中变量的值。 我在滚轮事件上实现此值。这似乎有效,但当我检查我的RAF函数中的值时,它仍然设置为第一个值

我想知道如何正确设置this.deltaY值?多谢各位

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”,似乎它不再可访问。