2017-03-02 5 views
3

ここでは、2つのメソッドwriteAと_writeからなるハッシュを返すjavascript/ES6メソッドがあります。私たちはハッシュの外側からwriteAを呼び出す必要があります。このメソッドは、その下に定義された_writeを呼び出して、そのジョブを終了します。javascriptハッシュの関数が同じハッシュの別のハッシュを安全に呼び出す方法

getHash =() => { 
    return { 
     writeA:() => { 
      console.log(this); 
      this._write('a'); 
     }, 
     _write: (value) => { 
      console.log(value); 
     } 
    }; 
}; 

getHash().writeA(); 

最後の行が実行されると、インタプリタはthis._writeが関数ではないことを示します。 _writeは同じ効果を持ちます。 writeA内から_writeを参照するにはどうすればよいですか?

答えて

4

あなたの関数定義には=>が使用されています。これにより、thisバインディングの動作が完全に変更されます。 =>で作成された関数は、作成された環境(スコープ)内にあったものとしてthisにバインドされています。 getHash()自体は=>関数なので、getHashが定義されているコンテキストのthisの値はwriteA()に表示されます。

getHash()の戻り値を返し、function()という構文で関数を書き直すと、期待する動作が得られます。

+0

'=>'は単なる便利な省略形だと考えるのは間違いです。それはそれですが、それははるかに重要な意味を持っています。 – Pointy

+0

この回答は完璧です...私は間違いなく=>とその意味を詳しく読んでいます。ありがとう! – RooSoft

+1

良い答え。 OPはいくつかの文字を入力する数秒を節約しました。その後、それを固定する分/時間を費やした。思考のための食べ物... – user949300

関連する問題