⊗jsPmCxInr 433 of 505 menu

JavaScriptにおけるコンテキストの基本

例えば、内部でthisを使用する関数funcがあるとします:

function func() { console.log(this.value); }

この関数内のthisは何を指しているのでしょうか? 私たちは知りません。JavaScriptも知りません。そして関数自体も知りません。 つまり、関数が作成される時点では、thisが具体的に何を指すかは 定まっていないのです。そしてそれが定まるのは、この関数が呼び出された時だけです。

例えば、以下のような入力欄があるとします:

<input id="elem" value="text">

この入力欄に、フォーカスが外れた時に実行されるよう関数funcを紐付けましょう。 これで、関数が実行される瞬間、thisはこの入力欄を指すようになります:

let elem = document.querySelector('#elem'); elem.addEventListener('blur', func); function func() { console.log(this.value); // フォーカスが外れた時 'text' を出力 }

しかし、入力欄は1つではなく、複数あるかもしれません:

<input id="elem1" value="text1"> <input id="elem2" value="text2">

そして、これらの各入力欄に関数funcを紐付けることができます。 この場合、最初の要素では関数が呼び出される瞬間のthisはそれを指し、 二番目の要素ではそれを指します。

実践的には、これは関数内のthisが、どの入力欄でフォーカスが外れたかによって 依存することを意味します:

let elem1 = document.querySelector('#elem1'); elem1.addEventListener('blur', func); let elem2 = document.querySelector('#elem2'); elem2.addEventListener('blur', func); function func() { console.log(this.value); // 'text1' または 'text2' を出力 }

基本的に、thisのこの特性は非常に便利です。 わずか1つの関数を作成し、任意の数の入力欄に紐付けることができるのです。 もしthisがイベントが発生した要素を指さなければ、このようなことは実現できません。 各入力欄に対して同じコードの関数を別々に作成しなければならなかったでしょう!

日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否