There is a class Car and a class Bot. Bot takes a car object as constructor argument. Also, Car class has setCollisionHandler function which behaves like object.setActionListener(func) in JavaScript. This setCollisionHandler reassigns function onCollision in car object.
Output:
Bot.onCollision: undefined
Bot.myfunc: 23
Expected output:
Bot.onCollision: 23
Bot.myfunc: 23
Why is this happening?
<script>
class Bot {
constructor(car) {
this.x = 23; // some parameter
this.car = car;
this.car.setCollisionHandler(this.onCollision);
}
myfunc() {
console.log('Bot.myfunc: ' + this.x); // Bot.myfunc: 23
}
onCollision() {
console.log('Bot.onCollision: ' + this.x); // Bot.onCollision: undefined //why is it undefined??
}
}
class Car {
onCollision() {
console.log('Original Car.onCollision'); // never executed as expected
}
setCollisionHandler(func) {
this.onCollision = func;
}
updateCarPosition() {
// more code
this.onCollision();
// more code
}
}
car = new Car();
bot = new Bot(car);
car.updateCarPosition();
bot.myfunc();
</script>