TypeError: undefined is not a function (Phaser JS)
TypeError: undefined is not a function (Phaser JS)
大家好,我只是想在 class 中执行一个方法,但它不起作用。
我收到 "Uncaught TypeError: undefined is not a function" 错误。
我正在调用其他函数并且它运行良好所以我不明白。我试过更改名称,但没有任何效果。
我认为我正在使用的 Phaser 有问题,但我不知道...
Bomb.prototype.collisionBlocs = function() {
if (!this.hasBounced) {
this.bounce();
this.hasBounced = true;
}
}
Bomb.prototype.bounce = function() {
if (this.direction == 'UP') {
this.direction = 'DOWN';
}
else if (this.direction == 'RIGHT') {
this.direction = 'LEFT';
}
else if (this.direction == 'DOWN') {
this.direction = 'UP';
}
else if (this.direction == 'LEFT') {
this.direction = 'RIGHT';
}
}
"In fact, collisionBlocs()
is a callback function from a phaser collision events : game.physics.arcade.collide(this.sprite, blocs, this.collisionBlocs);
Maybe that's the problem"
将成为问题所在。在 JS 中,函数内 this
的值取决于函数的调用方式。您将对 collisionBlocs
的引用传递给 .collide()
方法,当它调用它时,它不会正确设置 this
,因此 this.bounce
将是 undefined
。
你需要强制this
的值是正确的。最简单的方法是使用 .bind()
:
game.physics.arcade.collide(this.sprite, blocs, this.collisionBlocs.bind(this));
如果您需要支持这些浏览器,您可以使用 .bind()
method is not supported in older browsers (IE <=8), but there is a polyfill。
MDN 有更多关于 how this
works in JavaScript 的信息。
与绑定 this
相比,使用 collide
提供给您的 callbackContext
参数会更容易。它是专门针对此问题添加的。这是方法签名:
collide: function (object1, object2, collideCallback, processCallback, callbackContext)
您没有使用 processCallback
,因此您可以为此传递 null
,但您确实需要上下文。这是将调用回调的上下文(尝试从 this
开始)。
大家好,我只是想在 class 中执行一个方法,但它不起作用。 我收到 "Uncaught TypeError: undefined is not a function" 错误。
我正在调用其他函数并且它运行良好所以我不明白。我试过更改名称,但没有任何效果。
我认为我正在使用的 Phaser 有问题,但我不知道...
Bomb.prototype.collisionBlocs = function() {
if (!this.hasBounced) {
this.bounce();
this.hasBounced = true;
}
}
Bomb.prototype.bounce = function() {
if (this.direction == 'UP') {
this.direction = 'DOWN';
}
else if (this.direction == 'RIGHT') {
this.direction = 'LEFT';
}
else if (this.direction == 'DOWN') {
this.direction = 'UP';
}
else if (this.direction == 'LEFT') {
this.direction = 'RIGHT';
}
}
"In fact,
collisionBlocs()
is a callback function from a phaser collision events :game.physics.arcade.collide(this.sprite, blocs, this.collisionBlocs);
Maybe that's the problem"
将成为问题所在。在 JS 中,函数内 this
的值取决于函数的调用方式。您将对 collisionBlocs
的引用传递给 .collide()
方法,当它调用它时,它不会正确设置 this
,因此 this.bounce
将是 undefined
。
你需要强制this
的值是正确的。最简单的方法是使用 .bind()
:
game.physics.arcade.collide(this.sprite, blocs, this.collisionBlocs.bind(this));
如果您需要支持这些浏览器,您可以使用 .bind()
method is not supported in older browsers (IE <=8), but there is a polyfill。
MDN 有更多关于 how this
works in JavaScript 的信息。
与绑定 this
相比,使用 collide
提供给您的 callbackContext
参数会更容易。它是专门针对此问题添加的。这是方法签名:
collide: function (object1, object2, collideCallback, processCallback, callbackContext)
您没有使用 processCallback
,因此您可以为此传递 null
,但您确实需要上下文。这是将调用回调的上下文(尝试从 this
开始)。