94250


##### 質問内容

`Player`クラスのコンストラクタの配列で継承している親クラス`GameObject`の参照を入れてそれを`Player_Controller`クラスのコンストラクタに入れてそれを親クラスの`Component`クラスに入れてそれを  
`Player_Controller`クラスで利用したいのですが現状では`Playr`クラスの`///`コメント部 `new
Player_Controller(this.GameObject)`にて`this.GameObject`をしていまっていて新しい変数を用意してしまっている事により以下のエラーが出て`プロパティx`が参照できないという結果になってしまっているのですがどうやって子クラスから親クラスの参照取るのでしょうか？`C++`でいう`this`のようなことがしたいです。

##### 知りたいこと

`Player.js`のコメント部にて親クラスの参照を取る方法が知りたい

#### 調べたこと

サイトA：https://magazine.techacademy.jp/magazine/22392  
サイトB：https://developer.mozilla.org/ja/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

##### 環境

OS: Windows10  
ブラウザ: chrome  
利用ライブラリ: p5

##### GameObject.js

[code]

    "use strict"
    
    class GameObject
    {
        constructor()
        {
            this.position = new Vector(0,0);
        }
    
        Update()
        {
    
        }
    
        Update()
        {
    
        }    
        
    }
    
[/code]

##### Player_Controller.js

[code]

    "use strict"
    
    class Player_Controller extends Component
    {
        // ################################ コンストラクタ ################################ 
        constructor(go)
        {
            super(go);
        }
    
        // ################################ Start ################################ 
        Start()
        {
            
        }
    
        // ################################ Update ################################ 
        Update()
        {
            if(keyIsDown(LEFT_ARROW) == true)
            {
                super.gameObject.position.x += -10;
            }
            else if(keyIsDown(RIGHT_ARROW) == true)
            {
                super.gameObject.position.x += 10;
            }
        }
    
    }
    
[/code]

##### Component.js

[code]

    "use strict"
    
    class Component
    {
        // ################################ コンストラクタ ################################ 
        constructor(go)
        {
            this.gameObject = go;
        }
    
        // ################################ Start ################################ 
        Start()
        {
    
        }
    
    
        // ################################ Update ################################ 
        Update()
        {
    
        }
    
    }
    
[/code]

##### Player.js

[code]

    "use strict"
    
    class Player extends GameObject
    {
        // ################################ コンストラクタ ################################ 
        constructor()
        {
            super();
    ////////////////////////////////////////////////////////////////////////
            this.array =  [
                new Player_Controller(this.GameObject)
            ];
            this.player_sprite = loadImage("asset/player.png");
    /////////////////////////////////////////////////////////////////////////
    
        }
    
        // ################################ Update ################################ 
        Update()
        {
            this.array[0].Update();
        }
    
        // ################################ Render ################################ 
        Render()
        {
    
            image(this.player_sprite,this.position.x,this.position.y);
        }
    }
    
    
[/code]

##### Vector.js

[code]

    const PI = 3.14159;           //円周率
    const sinSpeed = PI / 100.0;  //sin波　加算
    const speed = 10;             //移動速度
    
    //ベクトルの引き算　
    //引数　Vector型
    function VectorSub(a,b)
    {
          let xx = a.x - b.x;
          let yy = a.y - b.y;
    
          return new Vector(xx,yy);
    }
    
    
    
    function Range(a,b)
    {
          return sqrt((a.x * a.x) + (b.y * b.y));
    }
    
    
    
    
    //ベクター
    class Vector
    {
          add(other)
          {
                console.assert(other instanceof Vector);
    
                return new Vector(this.x + other.x,this.y + other.y);
          }
    
    
          constructor(xx,yy)
          {
                this.x = xx;
                this.y = yy;
          }    
    }
    
    
    //線分
    class LineSegment
    {
          constructor(a,b)
          {
                this.start = new Vector(a.x,a.y);
                this.end = new Vector(b.x,b.y);           
          }
    }
    
    
[/code]

##### Error

[code]

    Uncaught TypeError: Cannot read properties of undefined (reading 'position')
        at Player_Controller.Update (Player_Controller.js:26:30)
        at Player.Update (Player.js:19:23)
        at Game.Update (Game.js:19:21)
        at draw (Main.js:17:10)
        at _main.default.redraw (p5.js:70809:27)
        at _draw (p5.js:63046:25)
    
[/code]


CC BY-SA 4.0
2023-03-19T02:54:01.333
94243
2023-03-21T12:42:01.563
2023-03-21T12:42:01.563
-1
55177
question
javascript
Javascript 子クラスで自分の親クラスの参照を渡す方法が知りたい


派生クラスの参照は基底クラスの参照として扱えますので、

[code]

                new Player_Controller(this)
    
[/code]

でよいでしょう。


CC BY-SA 4.0
2023-03-19T21:48:52.157
94250
2023-03-19T21:48:52.157
3475
94243
answer