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

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

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

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

551閲覧

JavaScriptでのクラスの作り方

606

総合スコア1

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

コンストラクタ

オブジェクト指向言語において、オブジェクトを生成時に呼び出され、データの初期化などを行なう関数・メソッドのことである。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/05/13 00:57

編集2021/05/13 01:51

JavaScriptでのクラスの作り方

JavaScriptのクラスについて

クライアントサイドで動くWebアプリを作成しようとしており、
JavaScriptのクラスおよびインスタンスの動的な生成について不明な点がございます。

クラスを作成し、
コンストラクタの中にパラメータなどを書き、
コンストラクタの外に
▼パラメータへの初期値の代入(イニシャライズ)
▼処理を開始
▼処理を停止
上記の関数を書こうとしています。


html

1<script> 2 3class MyClass{ 4 constructor( a, b, c ){ 5 }; 6 7 init () { 8 this.a = 1; 9 this.b = 2; 10 this.c = 3; 11 }; 12 13 start () { 14 let start1 = 0; 15 this.start1 = this.a + this.b; 16 }; 17 18 stop () { 19 let stop1 = 0; 20 this.stop1 = this.c - this.b; 21 }; 22 23}; 24 25const myclass = new MyClass( 2, 3, 4 ); 26// let myclass.start1a = myclass.start (); 27 console.log('myclass.start1a is ' + myclass.start1a); 28// let myclass.stop1a = myclass.stop (); 29 console.log('myclass.stop1a is ' + myclass.stop1a); 30 31</script>

私の思惑では、


myclass.start1a is 5
myclass.stop1a is 1


という結果を得たかったのですが、


myclass.start1a is undefined
myclass.stop1a is undefined


となってしまいました。

そこで、上記ではコメントアウトしてあるletを追加すると、


Uncaught SyntaxError: redeclaration of const myclass


のエラーが出て「関数の引数名としてある変数名が発生した後、関数本体内の let 代入文を使用して同じ変数名を再度宣言すると発生する」とのこと。ほかにも別のエラーに対応しようと試すと次は別のエラーが出るのループにハマってしまい、こちらで質問させていただくことにしました。

解決方法をご存知の方いらっしゃいましたら、よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2021/05/13 01:02

コードはマークダウンのcode機能にてご提示ください。 あと、エラーの通りそのようなプロパティはどこにも定義されてないように見受けられます
int32_t

2021/05/13 01:08 編集

start1 stop1 というプロパティ・変数がどうなって欲しいのか、現状の質問文では不明瞭です。
m.ts10806

2021/05/13 01:40

せめてコードのマークダウン対応は今からでもしてほしい。どのようになるかは既存回答参照 やり方はヘルプページなど参照
606

2021/05/13 01:53

読みにくい質問をしてしまいすみませんでした。勉強になりました。
m.ts10806

2021/05/13 01:59

いえいえ そのままだと冒頭のインデントが詰められてその部分に何かあったとき他者が気付けないのです。 空白1文字でも改行一つでも違えばそれは違うコードですしね
guest

回答2

0

いま一つどういう動作が欲しいのかよくわからないのですが、おそらく以下のような感じでしょうか。

  • start()this.athis.b の和を返す。
  • stop()this.cthis.b の差を返す。

であれば、以下のような修正が必要です。

  • コンストラクタ内で this.a this.b this.c を初期化する。
  • start()this.a + this.breturn する。stop() も同様。
  • 呼び出しは「console.log('myclass.start1a is ' + myclass.start());」のように。クラスの外側で myclass.start1a のようなプロパティを新規に作るのはオススメしません。

投稿2021/05/13 01:13

編集2021/05/13 01:15
int32_t

総合スコア20850

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

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

606

2021/05/13 01:24

ご回答ありがとうございます。とても参考になりました。感謝いたします。
guest

0

ベストアンサー

コンストラクタの使い方も微妙、initも利用されていないのでは?

javascript

1class MyClass{ 2 constructor( a, b, c ){ 3 this.a = a; 4 this.b = b; 5 this.c = c; 6 }; 7 init () { 8 this.a = 1; 9 this.b = 2; 10 this.c = 3; 11 }; 12 start () { 13 let start1 = 0; 14 this.start1 = this.a + this.b; 15 }; 16 stop () { 17 let stop1 = 0; 18 this.stop1 = this.c - this.b; 19 }; 20}; 21onst myclass = new MyClass( 2, 3, 4 ); 22myclass.start(); 23console.log('myclass.start1a is ' + myclass.start1); 24myclass.stop(); 25console.log('myclass.stop1a is ' + myclass.stop1);

投稿2021/05/13 01:11

yambejp

総合スコア114784

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

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

606

2021/05/13 01:25 編集

ありがとうございます。思惑通りの挙動になりました。 実際にやろうとしているコードを全部書いてしまうと冗長になりすぎるとの思いから、問題が発生している部分だけにフォーカスしたシンプルなソースを提示させていただきました。initも実際には利用する予定です。ご回答に感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問