2016-08-24 13 views
0

私は矢印関数が単なる類義語関数のショートカットだと思っています。しかし、最近私は、矢印の機能がいくつかの問題を引き起こしたという例を見つけました。ES6、arrow関数、 "this"の文脈

function refreshTable() { 
    $.ajax({ 
    url: root + `/posts?userId=${userId}`, 
    method: 'GET' 
    }).then(function(data) { 

    for (var item of data) { 
     $('table.list tbody').append(` 
      <tr> 
       <td>${item.id}</td> 
       <td>${item.title}</td> 
       <td>${item.date}</td> 
       <td> 
       <a href="" data-id="${item.id}" class="getDetails">View</a> | 
       <a href="" data-id="${item.id}" class="getDetails">Delete</a> 
       </td> 
      </tr> 
      `); 
    } 

    $('.getDetails').click((e) => { 
    // $(this) is actually the ajax call, I can't access the "data" part 
    }); 

    }); 
} 

はしかし、これは動作します:ここでは、サンプルコードです

function refreshTable() { 
    $.ajax({ 
    url: root + `/posts?userId=${userId}`, 
    method: 'GET' 
    }).then(function(data) { 

    for (var item of data) { 
     $('table.list tbody').append(` 
      <tr> 
       <td>${item.id}</td> 
       <td>${item.title}</td> 
       <td>${item.date}</td> 
       <td> 
       <a href="" data-id="${item.id}" class="getDetails">View</a> | 
       <a href="" data-id="${item.id}" class="getDetails">Delete</a> 
       </td> 
      </tr> 
      `); 
    } 

    $('.getDetails').click(function(e) { 
    // $(this) is the HTML element, so I can access "data" 
    }); 

    }); 
} 

はもちろん、機能を矢印にいくつかのロジックがあり、それはthisのための別のスコープを作成します。どうしたの?矢印機能(HTMLにアクセスする)で同じことを達成できますか、この場合は不可能ですか?

ありがとうございます!

+1

可能性の重複[アロー機能とこの](http://stackoverflow.com/questions/28798330/arrow-functions- and-this) –

+0

JavaScriptで「=>」(等号とそれ以上のものから形成される矢印)の意味は何ですか?](http://stackoverflow.com/questions/24900875/whats-the-meaning-矢の形をしたjav-in-the-equalsより大きい) –

+1

誰かが悪い日ですか?コメントを残さずに良い答えを下落させる。これらが戦略的なdownvotes場合...それはあなたにそれほど多くを意味する場合は:) – Michelangelo

答えて

0

まあ、あなたは矢印機能が何をしているか正確に経験しています。レキシカルスコープまたは親スコープからはthisが必要です。 http://exploringjs.com/es6/ch_arrow-functions.html

第2に、これは周囲から(語彙的に)選択されます。したがって、bind()やthat = thisは必要ありません。

はい、機能させることはできますが、HTML要素をクリック機能の外に置く必要があります。その後、関数内でthisを使用することができ、自分自身の使用に問題はありませんthis

1

私は矢印の機能と同じことを達成(HTMLにアクセスするため)、またはこの場合は可能ではないということですか?

矢印機能を使用できますが、thisは使用できません。あなたは、ハンドラがイベントオブジェクト経由にバインドされている要素を参照することができます。e.currentTarget

このプロパティは、通常の関数のthisに等しくなります。


だから、何が起こっているのですか?

参照:

関連する問題