Goowik
Goowik

Reputation: 803

Javascript prototype function override when x

In my case, I'm using the Phaser framework.

So in this example I'm extending the Group class of phaser. Every 'actor' class (Sprite, Group, ...) calls upon the update() prototype every few miliseconds.

My idea was to extend this function only when the application runs on a desktop (so not on a phone).

for example:

var MousePointer = function (game, parent, name) {
  Phaser.Group.call(this, game, parent, name);
  this.init();
};

MousePointer.prototype = Object.create(Phaser.Group.prototype);
MousePointer.prototype.constructor = MousePointer;

MousePointer.prototype.init = function () {
  // ... init
};

MousePointer.prototype.update = function () {
  // Do something when on desktop
};

I can't possibly use an if clausule in the update() function to check whether the player is on dekstop/tablet/phone. So is there a way to actually override the prototype on initialisation?

for example (pseudocode):

if(onPhone)
  MousePointer.prototype.update = parent.prototype.update;
else
  MousePointer.prototype.update = this.update;

Upvotes: 2

Views: 245

Answers (2)

Sebastian
Sebastian

Reputation: 1966

I think a better way to do this would be to write two different classes that shares the same parent, and then write different update() implementations for them. Then you can just do something like:

if(phone) {
    var obj = new PhoneMousePointerObject();
} else {
    var obj = new DesktopMousePointerObject();
}
// ... later
obj.update()

Upvotes: 2

GMchris
GMchris

Reputation: 5648

Well, you've kind of already written the answer for yourself, haven't you? This code (not inside the init method).

if(onPhone) {
  MousePointer.prototype.update = function(){//Phone implementation};
} else {
  MousePointer.prototype.update =  function(){//Other implementation};
}

I advise against starting off with the "regular" function and then potentially overriding it, since you're just declaring it for nothing.

Upvotes: 2

Related Questions