PROGBLOG Developers Blog

空想家 Developers Blog

稼ぐ力? とにかくスキルが欲しい。

JavaScript のアロー関数で this を使いたい

サンプルコード

<!-- HTML -->
<button class="fnBtn">function</button>
<button class="arrowThis">() => this</button>
<button class="arrowEvent">() => event.currentTarget</button>
<!-- HTML -->

<script>

    // 従来のfunction() 用いた通常関数で this の値を取得する
    const fnBtn = document.querySelector('.fnBtn');
    fnBtn.addEventListener('click', function() {
        console.log(this);
    })

    // アロー関数で this の値を取得する
    const arrowThis = document.querySelector('.arrowThis');
    arrowThis.addEventListener('click', () => {
        console.log(this);
    })

    // アロー関数 event.currentTarget を用い 従来 this の値を取得する
    const arrowEvent = document.querySelector('.arrowEvent');
    arrowEvent.addEventListener('click', (event) => {
        console.log(event.currentTarget);
    })

</script>

アロー関数を使用すると this が使えない

上記コードを実行した結果が下記になる。

<button class="fnBtn">function</button>
Window {window: Window, self: Window, document: document, name: "", ……
<button class="arrowEvent">() => event.currentTarget</button>

ふたつめ、アロー関数で正直に this を取得しようとした時だけ、うまくクリックした要素を取得でできていないことがわかる。

解決策は event.currentTarget

解決策は3つめevent.currentTarget を使用したアロー関数。

結果を見るとクリックした要素を取得できていることがわかる。