使用事件侦听器丢失此范围

时间:2017-09-15 09:31:16

标签: javascript

所以我有一个类声明,在我的构造函数中,我想在窗口滚动时添加一个事件监听器。像这样:

class MyClass {
    constructor(el, options) {
        // (...) initiating this properties and methods
        $window.on('scroll', this.onScroll);
    }

当我添加我的事件监听器时,我失去了this范围(onScroll()创建了自己的this实例),但如果我使用$window.on('scroll', () => this.scroll());,我保留this范围。有没有办法保留我的范围而不使用箭头功能?

2 个答案:

答案 0 :(得分:3)

您可以使用Function#bind。它返回附加到给定上下文的函数。

class MyClass {
    constructor(el, options) {
        $window.on('scroll', this.onScroll.bind(this));
    }
}

答案 1 :(得分:2)

如下所示:

class MyClass {
    constructor(el, options) {        
        $window.on('scroll', this.onScroll.bind(this));
    }
}

或者只是修改你定义onScroll函数的方式:

this.onScroll = () => { ... }