2016-05-25 3 views
2

私は以下のコードを実行していましたが、devtoolsで実行しているときにobj.hi = 'default'が表示されていましたが、iojs 3.3.1でハーモニー矢印関数を実行しているときにobj.hi = 'foo'。 "this"はdevtoolsのウィンドウで、 "this"はiojsのオブジェクトです。これを避けるために.callで矢印を使うことを避けるのが一般的に良い習慣ですか?.call()で矢印関数を使用しますか? "これは" devtoolsやiojsをローカルに使っているかどうかによって異なります。 .callで矢印を使用しないでください。

'use strict' 

let obj = { 
    hi: "default" 
} 

let foobar =() => { 
    console.log(this) 
    this.hi = "foo" 
} 

foobar.call(obj) 
console.log(obj) 
+3

なぜiojsを使用していますか?!?!?!?! – Amit

+0

ここでIo.jsは間違っています。おそらくそれをドロップし、最近のノードのインストールを取得する必要があります。 – Bergi

+0

ええと、私はこれがiojsの問題だと思います...私はノード6.2.0に入れ替えました。ありがとう。 –

答えて

1

MDNにArrow Functionsを参照してください。これはすでに字句バインドされているので(呼び出しを通して矢印機能 を呼び出し、

)または適用()メソッドは、引数のみを渡すことができますが、ノーを あり

ですから、矢印機能をcallapplyを使用することができますが、あなたは彼らのthis VAに影響を与えることはできません。この上の影響lue:彼らは包含範囲からthisを取ります。 thisをio.jsで動的に変更できるという事実は、仕様のこの部分に関しては壊れていることを示しています。

+0

なぜiojs + harmony関数はobjをこれで取得するのに成功しますか?それは語彙的にそれをつかんでいますか(これは、ウィンドウがクロムに​​最も近いオブジェクトである間に、ローカルで実行しているときにレキシカルスコープで最も近いオブジェクトです)。なぜ私はdevtoolsとiojs + harmonyの違いがあるのか​​分かりません。 –

+0

Nevermind。それはiojsのせいだ。 –

+0

が編集されました。私は、成功として仕様を満たしていない句ではないでしょう:-) – 1983

関連する問題