1. ホーム
  2. javascript

[解決済み] アロー関数で 'this' を束ねることができますか?

2022-04-22 11:17:34

質問

ES6を使い始めてしばらく経ちますが、ちょっとした問題にぶち当たりました。

私は矢印関数を使うのがとても好きで、できる限り使っています。

しかし、どうやらバインドできないようです。

以下はその機能です。

var f = () => console.log(this);

以下は、関数をバインドしたいオブジェクトです。

var o = {'a': 42};

そして、次のようにバインドします。 fo :

var fBound = f.bind(o);

を呼び出せばいいのです。 fBound :

fBound();

というのが出力されます( o オブジェクトを作成します)。

{'a': 42}

かっこいい 素敵!ただし、これがうまくいかないんです。を出力する代わりに o オブジェクトを出力します。 window オブジェクトを作成します。

そこで教えていただきたいのですが、矢印の関数をバインドすることはできるのでしょうか?(もしそうなら、どのように?)


上記のコードをGoogle Chrome 48とFirefox 43でテストしてみましたが、結果は同じでした。

どのように解決するのですか?

できないこと リバインド this をアロー関数で使用することができます。常に定義されたコンテキストとして定義されます。もしあなたが this が意味を持つようにするには、通常の関数を使用する必要があります。

から ECMAScript 2015 仕様 :

ArrowFunction内の引数、super、this、new.targetへの参照は、語彙的に囲む環境でのバインディングに解決する必要があります。一般的に、これは、すぐに包含する関数の関数環境となります。