私はしばらくの間 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
意味のあるものにする必要がある場合は、通常の関数を使用する必要があります。
ArrowFunction 内の arguments、super、this、または new.target への参照は、レキシカルに囲む環境内のバインディングに解決される必要があります。通常、これは直接囲む関数の関数環境になります。