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

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

新規登録して質問してみよう
ただいま回答率
85.48%
コンストラクタ

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

JavaScript

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

Q&A

解決済

1回答

1897閲覧

JavaScript入門者 メンバ関数の前方宣言みたいな行為はあるのかどうか知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

コンストラクタ

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

JavaScript

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

0グッド

0クリップ

投稿2021/09/18 09:17

知りたいこと

この場合どうすれば順序関係が解消できるのか知りたい

現状、質問内容

提示コードのGameクラスのconstructer部の関数EnemyInstance()関数ですがその関数をコンストラクタよりも上に置いていあるのにもかかわらず未定義ですというエラーが表示されています。これはなぜでしょうか?

参考サイト: https://developer.mozilla.org/ja/docs/Web/JavaScript

js

1 2class Enemy 3{ 4 constructor(pos) 5 { 6 this.position = new Vector(pos.x,pos.y); 7 this.alive = true; 8 this.size = 50; 9 } 10 11 Init(pos) 12 { 13 this.position = new Vector(pos.x,pos.y); 14 this.alive = true; 15 16 } 17 18 Update() 19 { 20 21 } 22 23 Renderer() 24 { 25 //fill(color(0,100,0)); 26 line(this.position.x,this.position.y,this.position.x + this.size,this.position.y + this.size); 27// triangle(this.position.x,this.position.y + this.size, 28 // this.position.x - this.size,this.position.y - this.size, 29 // this.position.x + this.size,this.position.y - this.size); 30 31 } 32 33} 34 35 36class Player 37{ 38 constructor() 39 { 40 this.acce = new Vector(0,0); //sin波 41 this.position = new Vector(300,300); 42 this.acce = new Vector(0,0); 43 this.alive = true; 44 45 } 46 47 Update() 48 { 49 KeyInput(this.position,this.acce); 50 } 51 52 53 Renderer() 54 { 55 56 } 57 58} 59 60class Bullet 61{ 62 63} 64 65 66class Game 67{ 68 69 //オブジェクトプール 70 EnemyInstance(pos) 71 { 72 this.enemy.forEach(item => 73 { 74 75 if(item.alive === false) 76 { 77 item.Init(pos); 78 return; 79 } 80 81 82 }); 83 this.enemy.push(new Enemy(new Vector(100 + 50,100))); 84 return; 85 } 86 87 constructor() 88 { 89////////////////////////////////////////////////////////////////////////////////////////////////////////// 90 this.enemy = new Array(); //Enemy 配列 91 92 for(let i = 0; i< 10; i++) 93 { 94 EnemyInstance(new Vector(100 + 40 * i,100)); 95 } 96////////////////////////////////////////////////////////////////////////////////////////////////////////// 97 98 } 99 100 101 Collision() 102 { 103 104 } 105 106 Update() 107 { 108 this.enemy.forEach(item => item.Update()); 109 } 110 111 112 Renderer() 113 { 114 this.enemy.forEach( item => item.Renderer()); 115 } 116 117 118 119 120 121 122}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/09/18 09:22

コードは自分で書きました。
m.ts10806

2021/09/18 09:24

自分で書いたのに分からないというのが分からない。 どこかからコピペしてきたんでしょうね。
guest

回答1

0

ベストアンサー

this を付けてみて下さい。

javascript

1this.EnemyInstance(new Vector(100 + 40 * i,100));

<参考>
■ ES6 における JavaScript のクラス定義
https://www.yunabe.jp/docs/javascript_class_es6.html

投稿2021/09/18 09:36

cx20

総合スコア4633

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問