我有一个扩展另一个类的类。但是在父类中定义的一个函数试图引用"这个",抛出一个异常,说明"这个"未定义。以下是相关代码:
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
您知道为什么实例未定义,我该如何解决? 谢谢!
答案 0 :(得分:1)
在forEach
函数this
的上下文中,全局对象不是播放器实例。由于您使用的是ES6,您可以通过更改为箭头功能来解决它:
updatePosition() {
this.axes.forEach((axis) => {
this.position[axis] += this.velocity[axis];
});
}
在这里阅读更多内容,在“lexical this”下:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions