javascriptのthisについて質問です。
Accordionというクラスの中にある、openAccordionというメソッド内でthisを呼ぶと、クリックした要素が呼び出される、sumというメソッド内でthisを呼ぶとAccordionが呼びだされる、ということが理解できません。
クラスのメソッド内でthisを呼ぶとwindowオブジェクトが呼び出されるという認識でしたが違うのでしょうか。また、addEventlisnerのclickで呼び出される関数内でthisを呼んだら必ずクリックした要素が呼び出されるという事でしょうか。
長々としていて大変恐縮ですが、ご教授お願いいたします。
※constructor関数内でthisを呼ぶと、Accordionが呼び出されるのは理解できます。
html
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 <link rel="stylesheet" href="style.css"> 9</head> 10<body> 11 12 <div class="accordion"> 13 <p>Q1.なんでピノのアイスって売れていると思いますか。</p> 14 </div> 15 <div class="accordion-answer"> 16 <p>A1.知りません。</p> 17 </div> 18 <div class="accordion"> 19 <p>Q2.なんでピノのアイスって売れていると思いますか。</p> 20 </div> 21 <div class="accordion-answer"> 22 <p>A1.知りません。</p> 23 </div> 24 25 26 27 28 <script src="main.js"></script> 29</body> 30</html>
js
1 2document.addEventListener('DOMContentLoaded',function(){ 3 4 class Accordion{ 5 constructor(){ 6 7 let accordion = document.querySelectorAll(".accordion"); 8 let content = document.querySelectorAll("p"); 9 accordion = [...accordion]; 10 content = [...content]; 11 console.log(this); 12 13 for(let i = 0; i < accordion.length; i++){ 14 accordion[i].addEventListener('click',this.openAccordion,false) 15 } 16 } 17 18 openAccordion(){ 19 console.log(this); 20 } 21 22 sum(){ 23 console.log(this); 24 } 25 } 26 27 const acd = new Accordion(); 28 29 30 acd.sum(); 31 32}); 33
回答2件
あなたの回答
tips
プレビュー