Javascript ES6在单击事件上执行函数

Javascript ES6在单击事件上执行函数,javascript,ecmascript-6,Javascript,Ecmascript 6,这是我代码的一小部分。问题在于这一点。下面的代码“this”引用了HomeView类,因为我这样做了。\u changeLanguage。绑定(this)。如果我删除绑定(this)部分,那么this指的是li元素,但是我不能调用this.\u renderHTML()方法 class HomeView extends BaseView{ constructor(model){ super(null, model); } _renderHTML(){

这是我代码的一小部分。问题在于这一点。下面的代码“this”引用了HomeView类,因为我这样做了。\u changeLanguage。绑定(this)。如果我删除绑定(this)部分,那么this指的是li元素,但是我不能调用this.\u renderHTML()方法

class HomeView extends BaseView{

    constructor(model){
        super(null, model);
    }

    _renderHTML(){
        this.$view.html(template(this.model));
        return this.$view;
    }

    _init(){
        this.$view.on("click", "#langs li", this._changeLanguage.bind(this));
    }

    _changeLanguage(){
        console.log($(this).data("lang"));
        this._renderHTML();
    }

}

在这样的点击事件上运行changeLanguage方法最干净的方法是什么。

您应该能够编写
\u changeLanguage()
方法: 类HomeView扩展了BaseView{

    _changeLanguage = () => {
        console.log($(this).data("lang"));
        this._renderHTML();
    };
}
fat arrow语法为您提供了对
的隐式绑定,因此您可以将其他代码更改为:

_init(){
    this.$view.on("click", "#langs li", this._changeLanguage);
}

因此,不再使用
bind()
…由于ES6,这一切都是隐式的。

只需使用
this。$view
?如果使用babel,我通常使用带箭头函数的方法。另请参阅。