2017-12-02 4 views
-2

矢印関数を使用して「正しい」を返すようにしたいですか?矢印関数を使用して「正しい」を返すようにしたい場合

let mama2 = { 

    children:12, 
    surname: true, 
    town: 'umuadi', 
    school:'imo state university', 
    mamaChild:() => { 
     if (this.surname){ 
      return 'correct' 
     }else{ 
      return 'failed' 
     } 
    } 
} 




let mama3 = { 

    children:12, 
    surname: true, 
    town: 'umuadi', 
    school:'imo state university', 
    mamaChild:function() { 
     if (this.surname){ 
      return 'correct' 
     }else{ 
      return 'failed' 
     } 
    } 
} 

この2つのコードの違いを知りたいのはなぜ私に違う結果がもたらされるかです。

このコードをコンソールで実行すると、最初のコードは「失敗」の結果を、2番目のコードは「正しい」結果を返します。

+2

Arrow関数は 'this'のコンテキストを参照しようとしているオブジェクトではない親スコープにバインドします。これは普通の 'function()'で行われていないので、なぜ動作するのですか? –

+0

[thisキーワードはどのように機能しますか?](https://stackoverflow.com/questions/3127429/how-does-この - キーワード - 仕事) – moon

+0

https://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/ –

答えて

2

矢印内にthisを使用すると、windowオブジェクトが参照されます。 thisを通常の関数の中に使用すると、現在のオブジェクトを参照します。

いずれの場合もコンソールログthisを使用してその違いを確認できます。

let mama2 = { 
 
    children: 12, 
 
    surname: true, 
 
    town: 'umuadi', 
 
    school: 'imo state university', 
 
    mamaChild:() => { 
 
     console.log(this); // window object 
 
     if (this.surname) { 
 
      return 'correct' 
 
     } else { 
 
      return 'failed' 
 
     } 
 
    } 
 
} 
 

 
mama2.mamaChild();

let mama3 = { 
 
    children: 12, 
 
    surname: true, 
 
    town: 'umuadi', 
 
    school: 'imo state university', 
 
    mamaChild: function() { 
 
     console.log(this); // mama3 object 
 
     if (this.surname) { 
 
      return 'correct' 
 
     } else { 
 
      return 'failed' 
 
     } 
 
    } 
 
} 
 

 
mama3.mamaChild();

0

アロー機能は、この場合には、あなたが参照しようとしているオブジェクトではありません外側のスコープにthisのコンテキストをバインドします。 function()のプレーンを使用する場合、thisは、チェックしている値を持つオブジェクトを参照します。

関連する問題