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

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

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

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

Q&A

解決済

1回答

1971閲覧

JavaScript入門者 プロパティを用意しているのにエラーになる原因が知りたい。[ Uncaught RangeError: Maximum call stack size exceeded ]

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/09/18 11:24

提示コードですがコメント部///のコードですがなぜエラーになるのでしょか?以下のError提示コード部です。参考サイトと同じようにコードを作ったのですがエラーになります。これは何が原因なのでしょうか?

参考サイト: https://www.tohoho-web.com/js/class.htm

Error

1Game.js:49 Uncaught RangeError: Maximum call stack size exceeded 2 at Player.get position [as position] (Game.js:49) 3 at Player.get position [as position] (Game.js:49) 4 at Player.get position [as position] (Game.js:49) 5 at Player.get position [as position] (Game.js:49) 6 at Player.get position [as position] (Game.js:49) 7 at Player.get position [as position] (Game.js:49) 8 at Player.get position [as position] (Game.js:49) 9 at Player.get position [as position] (Game.js:49) 10 at Player.get position [as position] (Game.js:49) 11 at Player.get position [as position] (Game.js:49) 12get position @ Game.js:49 13get position @ Game.js:49 14get position @ Game.js:49 15省略 16get position @ Game.js:49 17get position @ Game.js:49 18get position @ Game.js:49 19get position @ Game.js:49 20 21Show 170 more frames 22Main.js:19 Uncaught ReferenceError: Cannot access 'entry' before initialization 23 at draw (Main.js:19) 24 at p5._main.default.redraw (p5.js:70809) 25 at _draw (p5.js:63046)

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 this.size = 100; 45 } 46//////////////////////////////////////////////////////////////// 47 get position() 48 { 49 return this.position; 50 } 51//////////////////////////////////////////////////////////////// 52 set position(p) 53 { 54 this.position.x = p.x; 55 this.position.y = p.y; 56 57 } 58 59 60 Update() 61 { 62 KeyInput(this.position,this.acce); 63 } 64 65 66 Renderer() 67 { 68 line(this.position.x,this.position.y,this.position.x + this.size,this.position.y + this.size); 69 70 } 71 72} 73 74class Bullet 75{ 76 77} 78 79 80class Game 81{ 82 83 //オブジェクトプール 84 EnemyInstance(pos) 85 { 86 this.enemy.forEach(item => 87 { 88 89 if(item.alive === false) 90 { 91 item.Init(pos); 92 return; 93 } 94 95 96 }); 97 98 this.enemy.push(new Enemy(new Vector(pos.x,pos.y))); 99 return; 100 } 101 102 constructor() 103 { 104 105 this.enemy = new Array(); //Enemy 配列 106 this.Player = new Player(); //Player 107 108 for(let i = 0; i< 10; i++) 109 { 110 this.EnemyInstance(new Vector(100 + 40 * i,100)); 111 } 112 113 114 } 115 116 117 Collision(posA,posB) 118 { 119 if(Collision.LineSegment(posA,posB) == true) 120 { 121 return true; 122 } 123 else 124 { 125 return false; 126 } 127 } 128 129 Update() 130 { 131 this.enemy.forEach(item => 132 { 133 item.Update(); 134 if((this.Collision(this.player.position,item.position) === true) && (item.alive === true)) 135 { 136 item.alive = false; 137 } 138 139 }); 140 141 142 143 144 } 145 146 147 Renderer() 148 { 149 this.enemy.forEach( item => item.Renderer()); 150 this.plyer.Renderer(); 151 } 152 153 154 155 156 157 158}

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

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

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

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

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

guest

回答1

0

ベストアンサー

これは何が原因なのでしょうか?

position() を再帰的に呼び出しているのが原因です。
メンバ変数名と getter の名前が同じである為に、position() を繰り返し呼び出してしまっています。
どちらかを別名に変えてみて下さい。以下はメンバ変数名を変更した場合の例です。

javascript

1class Player { 2 constructor() { 3 this.acce = new Vector(0, 0); //sin波 4 this._position = new Vector(300, 300); // "this.position" → "this._position" 5 this.acce = new Vector(0, 0); 6 this.alive = true; 7 this.size = 100; 8 } 9 //////////////////////////////////////////////////////////////// 10 get position() { 11 return this._position; // "this.position" → "this._position" 12 } 13 //////////////////////////////////////////////////////////////// 14 set position(p) { 15 this._position.x = p.x; // "this.position" → "this._position" 16 this._position.y = p.y; // "this.position" → "this._position" 17 } 18 : 19}

投稿2021/09/18 12:53

cx20

総合スコア4648

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

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

退会済みユーザー

退会済みユーザー

2021/09/18 13:25

なるほど以下ようにしたのですがエラー出ますなぜでしょうか? 「 Uncaught TypeError: Cannot read properties of undefined (reading 'getPosition') at Game.js:134 at Array.forEach (<anonymous>) at Game.Update (Game.js:131) at Entry.Loop (Entry.js:13) at draw (Main.js:19) at p5._main.default.redraw (p5.js:70809) at _draw (p5.js:63046) 」 「 constructor() { this.acce = new Vector(0,0); //sin波 this.position = new Vector(300,300); this.acce = new Vector(0,0); this.alive = true; this.size = 100; } get getPosition() { return this.position; } set setPosition(p) { this.position.x = p.x; this.position.y = p.y; } ////////////////////////////////↓です。 if((this.Collision(this.player.getPosition,item.position) === true) && (item.alive === true)) 」
cx20

2021/09/18 16:21

> なるほど以下ようにしたのですがエラー出ますなぜでしょうか? コードの断片だけだと何とも言えないですが、おそらく this.player が undefined になっているのではないでしょうか。 デバッグ実行して確認してみて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問