これは、How to access the correct `this` context inside a callback?の複製ではありません。メンバ関数をイベントリスナーとして使用するためのES6ショートカットはありますか?
回答の一部は、the Question is differentと似ている可能性があります。以下のコメントから答えが分かります。これは、ES6の古いJavaScriptではないため、さまざまな解決策があります。この質問はコールバックではなく、イベントリスナーに関するものです。そのようなものには、プレーンコールバックには適用されない他の解決策があります。私はクラスを持っていると私はいくつかのイベントが定型
class SomeClass {
constructor(msg, elem) {
this.msg = msg;
elem.addEventListerer('click', (...args) => { // Can these
this._onClickListener(...args); // three lines
}); // be simpler?
}
_onClickListener() {
console.log(this.msg);
}
}
の束を書くことに私が持っ終わるそのクラス内の関数を呼び出すようにしたい場合は
使用するためのいくつかのES6糖衣構文がありますリスナーとしてのクラスメソッド理想的には私は
class SomeClass {
constructor(msg, elem) {
this.msg = msg;
elem.addEventListener('click', this._onClickListener);
}
_onClickListener() {
console.log(this.msg);
}
}
ような何かをできるように好きで、それが正しくthis
を設定し、関係なく、イベントのすべての引数を渡す必要があるだろう。
しかし、それは動作しません。ボイラープレートなしでthis
が設定されていません。
class SomeClass {
constructor(msg, elem) {
this.msg = msg;
elem.addEventListener('click', this._onClickListener);
}
_onClickListener() {
console.log(this.msg); // this is wrong
}
}
var s = new SomeClass("hello", document.querySelector("button"));
<button>click me</button>
を削除することができるということです私はES6の何かに精通していませんが、あなたはESW(ECMAScript Whatever)デコレータで何かをするかもしれません。 –
一般的には、イベントリスナーのコールバックで 'this'を要素にすることが望ましいでしょう。 – adeneo
EventListenerインターフェイスは、これを処理するための素晴らしい方法を提供します:https://jsfiddle.net/ysLd6L35/ –