2016-07-16 7 views
0

私は別のクラスを拡張するクラスを持っています。しかし、 "this"を参照しようとする親クラスで定義された関数は、 "this"が定義されていないという例外をスローします。ここに関連するコードは次のとおりです。Js継承したクラスインスタンスが未定義

class Entity { 
    constructor() { 
     this.axes = ['x', 'y']; 
     ... 

    updatePosition() { 
     this.axes.forEach(function(axis) { 
      this.position[axis] += this.velocity[axis]; 
     }); 
    } 
} 

class Player extends Entity { 
    constructor() { 
     super(); 
     .... 
    } 
... 
} 

var player = new Player(); 

とエラーがスローさ:

.../player.js:25 
      this.position[axis] += this.velocity[axis]; 
       ^

TypeError: Cannot read property 'position' of undefined 

あなたはなぜインスタンスが定義されていない知っていますか、そしてどのように私はそれを修正することができますか? ありがとう!

答えて

1

forEachの文脈では、thisはグローバルオブジェクトであり、プレーヤインスタンスではありません。あなたはES6を使用しているので、あなたはそうのような機能を矢印変更することによって、それを解決することができます:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

+1

それともに 'self'変数ポインティングを参照することができます:

updatePosition() { this.axes.forEach((axis) => { this.position[axis] += this.velocity[axis]; }); } 

は「字句この」の下に、ここで続きを読みます'this'はforEach関数の上にあり、forEachの内部には' self'変数があります。 – atrifan

+0

オクラホマ、それを手に入れます。私はjavascriptを嫌い... – nodwj

+0

ええ、私たちはすべて行う;) – apieceofbart

関連する問題