矢印関数で「this」をバインドできますか? 質問する

矢印関数で「this」をバインドできますか? 質問する

私はしばらくの間 ES6 を試してきましたが、ちょっとした問題に遭遇しました。

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

ただし、バインドすることはできないようです。

関数は次のとおりです。

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

関数をバインドするオブジェクトは次のとおりです。

var o = {'a': 42};

そして、私は次のようfにバインドしますo:

var fBound = f.bind(o);

そして、次のように呼び出すだけですfBound:

fBound();

次のように出力されます (oオブジェクト):

{'a': 42}

すごい!素敵!ただし、動作しません。オブジェクトを出力する代わりにo、オブジェクトを出力しますwindow

そこで知りたいのは、矢印関数をバインドできるかどうかです。(できる場合、その方法は?)


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

ベストアンサー1

あなたはできません再バインド this矢印関数では、常にそれが定義されたコンテキストで定義されます。this意味のあるものにする必要がある場合は、通常の関数を使用する必要があります。

からECMAScript 2015 仕様:

ArrowFunction 内の arguments、super、this、または new.target への参照は、レキシカルに囲む環境内のバインディングに解決される必要があります。通常、これは直接囲む関数の関数環境になります。

おすすめ記事