2016-05-20 17 views
2

In meinem Fall verwende ich das Phaser-Framework.Javascript Prototyp Funktion überschreiben, wenn x

Also in diesem Beispiel erweitern ich die Gruppenklasse des Phaser. Jede "Schauspieler" -Klasse (Sprite, Group, ...) ruft alle paar Millisekunden den Prototyp update() auf.

Meine Idee war, diese Funktion nur zu erweitern, wenn die Anwendung auf einem Desktop (also nicht auf einem Telefon) ausgeführt wird.

zum Beispiel:

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 
}; 

Ich kann möglicherweise nicht verwende ein, wenn clausule in der update() Funktion zu überprüfen, ob der Spieler auf dekstop/Tablet/Telefon. Gibt es also eine Möglichkeit, den Prototyp bei der Initialisierung tatsächlich zu überschreiben?

zum Beispiel (Pseudo-Code):

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

Antwort

2

Nun, haben Sie Art die Antwort schon selbst geschrieben, haben Sie nicht? Dieser Code (nicht innerhalb der init Methode).

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

ich davon abraten, mit der „normalen“ Funktion Anfahren und dann möglicherweise es überschreiben, da Sie es einfach für nichts zu erklären.

2

Ich denke, ein besserer Weg, dies zu tun wäre, zwei verschiedene Klassen zu schreiben, die das gleiche Elternteil teilen, und dann verschiedene update() Implementierungen für sie schreiben. Dann können Sie einfach Folgendes tun:

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