私はES2015でBabelを使用しています。そしての中にthis
を使いたいです。ES6の "コールバック"で "this"クラスの使い方は?
class baz {
bar = "xxx";
foo() {
x(function() {
console.log(this.bar);
});
}
}
function x(callback) {
return callback();
}
var y = new baz();
y.foo();
https://jsfiddle.net/dnthehnt/7/ 限り私は理解して、これはx()
でコールバック関数を参照するので、私は
TypeError: this is undefined
を取得しています。解決策として、私は
class baz {
bar = "xxx";
foo() {
var bar = this.bar;//<=====
x(function() {
console.log(bar);//<=====
});
}
}
function x(callback) {
return callback();
}
var y = new baz();
y.foo();
https://jsfiddle.net/dnthehnt/6/ を使用し、
xxx
を得るこれが解決策ですが、コードの質量を持っている場合、それを書くのは非常に混乱し、ハードになっています。 this
を使用するためのより良い解決法はありますか?またはコールバックとこれを使用するためのES6のための他の規律。
有効なES2015ではありません。 2行目( 'bar =" xxx ";')では無効です。 A) 'constructor(){/*...*/} 'にコードを入れ、B)' bar'の前に 'this.'を使用する必要があります。 –
'' 'constructor'''を入れる必要はないと思います。私は、初期化時に追加されるコンストラクタ変数を入れる方が良いと思います。 – Shekspir
これは、「思考」の問題ではありません。そのコードは有効なES2015コードではありません。インスタンスフィールドをそのように定義できるようにするための[ステージ1の提案](https://github.com/jeffmo/es-class-fields-and-static-properties)がありますが、ステージ1だけです(ステージがあります0〜4、4は「次の仕様に含める準備ができています」)。 ES2016の仕様をカットオフしたわけではなく、スピードが速くなければ、ES2017を探していました。したがって、Babelはそれを変えるかもしれませんが(Babelには多くの非標準機能があります)、構文が仕様に入る前に変更され、非標準コードが残されます。 –