質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

508閲覧

thisの使用方法と意義について理解を深めたい

koala.engineer

総合スコア4

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2022/10/05 09:57

編集2022/10/05 10:10

実現したいこと

thisを使用する意義と使用方法について理解を深めたいです。

前提

javascriptでスロットマシンの作成に挑戦しており、
その過程でクラスについて学習しています。

お手本のコードは以下です。

js

1'use strict'; 2 3{ 4 class Panel { //クラス 5 constructor() { //コンストラクタ 6 const section = document.createElement('section'); 7 section.classList.add('panel'); 8 9 this.img = document.createElement('img'); 10 this.img.src = this.getRandomImage(); 11 12 this.timeoutId = undefined; 13 14 this.stop = document.createElement('div'); 15 this.stop.textContent = 'STOP'; 16 this.stop.classList.add('stop'); 17 this.stop.addEventListener('click', () => { 18 clearTimeout(this.timeoutId); 19 }); 20 21 section.appendChild(this.img); 22 section.appendChild(this.stop); 23 24 const main = document.querySelector('main'); 25 main.appendChild(section); 26 } 27 28 getRandomImage() { 29 const images = [ 30 'img/seven.png', 31 'img/bell.png', 32 'img/cherry.png', 33 ]; 34 return images[Math.floor(Math.random() * images.length)]; 35 } 36 37 spin() { 38 this.img.src = this.getRandomImage(); 39 this.timeoutId = setTimeout(() => { 40 this.spin(); 41 }, 50); 42 } 43 } 44 45 const panels = [ //インスタンス 46 new Panel(), 47 new Panel(), 48 new Panel(), 49 ]; 50 51 const spin = document.getElementById('spin'); 52 spin.addEventListener('click', () => { 53 panels.forEach(panel => { 54 panel.spin(); 55 }); 56 }); 57}

質問内容

6行目~14行目にかけてthisが多用されていますが、
これが何を意味するものか理解できません。

クラスから生成されるインスタンスをthisで表示する

検索結果、上記の情報を得られましたが、
thisとインスタンスの関連性が分からず混乱しています。

現状を踏まえ、以下3点についてお伺いしたいです。

1. thisとは一体何者なのか
2. thisはどのタイミングで使用されるのか
3. img stopには付与されるのに、mainsectionにはなぜ付与されないのか

試してみたこと

thisの定義及び使用例について検索しました。
併せて、クラス コンストラクタ インスタンスについても検索しました。

一通り言葉の意味を理解することはできましたが、
まだ点として理解している感覚です。

各用語がどのように紐づいてクラスを成すのか、
こちらの質問を通じて理解したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コンストラクタしかコードがないから分かりづらいのではないでしょうか。

他のメソッドを使う場合、this.***としておいた値はインスタンスとともに保存されて、あとから同様な形で使うことができます。あとから使わないのであれば、わざわざthisを介してインスタンスに値を入れる必要はありません。

投稿2022/10/05 10:02

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koala.engineer

2022/10/05 10:19

ご連絡頂きありがとうございます! 続きのコードを追加致しました。 maisumakun様が仰る通り、 this.*** が複数箇所で使用されていると気づけました。 this.を付与できる要素には条件があるのでしょうか。 例えば、img, stop, timeoutIdには付与されていますが、 sectionやmainには付与されておらず、明確な線引きが分からずにおります...。
maisumakun

2022/10/05 11:43 編集

> 例えば、img, stop, timeoutIdには付与されていますが、 sectionやmainには付与されておらず すでに回答したように、単に「あとからも使う(あるいは使う可能性のある)もの」を入れてあるだけです。sectionやmainはその場でしか使わないので保存しない、それ以上の深い意味はありません。
koala.engineer

2022/10/05 15:37

ご回答頂きありがとうございます。 あまり深く考えずにそのように理解させて頂きます。 この度はありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問