2016-03-21 9 views
0

私は矢印の機能を使用しようとしていますし、私は私がfontColorcardColorをログコンソール場合は、変数特定の要素を取得するときに私の矢印機能が機能しないのはなぜですか?

let cardColor; 
let fontColor; 

let toggleSidebarInfo =() => { 
    let colors; 
    $('.client-director, .person-link, .card-picture').click((evt) => { 
     employeeId = evt.target.id; 
     ///// FOCUS ON THIS PART ////// 
     colors = $(this).hasClass('card-picture') ? 
      (cardColor = $(this).next().css('backgroundColor'), 
      fontColor = $(this).next().css('color')) : 
      (cardColor = $(this).css('backgroundColor'), 
      fontColor = $(this).css('color')); 
    ///////////////////////// 
     compareId(employeeId); 
    }); 
}; 

を割り当てるしようとしたとき、私は

.click((evt) => { . . . });

をやっていると私は未定義の取得エラーを取得しています

が、私はそれを通常の方法を行う場合

.click(function(evt) { . . . });

すべて正常に動作します。

私には何が欠けていますか?

+2

あなたは「this」を参照しているので、適切でないところで矢印機能を使用しようとしないでください。 – Bergi

+0

@Bergiだから '$(this) 'の代わりに何を使うべきですか?私はそれがjQueryの特別な(この)機能だと思っていました。 – NietzscheProgrammer

+1

最も簡単な解決策は、適切な関数型を使用することですが、 'evt.currentTarget'を使用してバインドされた要素を取得することもできます。あなたが特に外側の字句環境の 'this 'を必要としない限り、私は矢印関数を使用しませんが。 –

答えて

0

Arrow functionsは自動的にその中にlexical scopeをバインドしますので、あなたのケースでは、thisはイベントハンドラ内にイベントハンドラの要素を指しません。矢印の機能を使用してevent bindingすぐ下のようになりますarrow functionsの使用

、結合事象の間にここで

$('.client-director, .person-link, .card-picture').click(function(evt){ 

}.bind(this)); 

は、不適切です。最善の選択肢は、通常の無名関数を使うことです。

矢印機能 でバインドされたスコープは、どのような方法でもオーバーライドできません。

+0

'$(this)'の代わりに何を使うべきですか?私はそれがjQueryの特別な機能だと思った。 – NietzscheProgrammer

+0

@NietzscheProgrammer: '$(this)'を変更する必要はないと言って、 'function'に戻すべきだと言った。 – Bergi

+0

私はあなたの答えをdownvoteしませんでした。実際に私のコードは、関数を置くことによってのみ動作します。最後にbind(this)を置くと、動作しません。 – NietzscheProgrammer

関連する問題