Javascript ES6在单击事件上执行函数
这是我代码的一小部分。问题在于这一点。下面的代码“this”引用了HomeView类,因为我这样做了。\u changeLanguage。绑定(this)。如果我删除绑定(this)部分,那么this指的是li元素,但是我不能调用this.\u renderHTML()方法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(){
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,我通常使用带箭头函数的方法。另请参阅。