Vue インスタンスの methods にアロー関数を使ったら動作しない理由を this のスコープで説明します

28053 ワード

🌼 はじめに

こんにちは、vue.js 初心者です。基本チュートリアルをやってるとき、methodsにアロー関数を使ったら正常に動作しないことを知ってそれを深堀りしたくなったので記事にします。

簡単なカウンターサンプルも作ってみましたので、皆さんも試してみてください。

2つのボタンが参照してる関数は中身は全く同じで、違うのは書き方だけです。

var app = new Vue({
  el: '#app',
  data: {
    counter: 0
  },
  methods: {
    addCounterFunction: function() {
      this.counter++
    },
     addCounterArrowFunction: () => {
      this.counter++
    },
  }
})

なぜアロー関数だけ動作しないのか、その理由はアロー関数はthisのスコープが違うからのではないかと思いました。正確にどう違ってそれがどういう影響を与えてるかを今から検証します!

1. thisのスコープ

まずはthisのスコープについて理解する必要があります。JS Primer にサンプルコードと一緒に詳しい説明がありますので、たくさん参考にさせていただきました。