dimanche 18 septembre 2016

Refactoring objects with the same prototype properties

Let's say we have a superclass Character and 2 subclasses Player and Enemy.

var Character = function(x, y){
    this.x = x || 0;
    this.y = y || 0;
};
var Enemy = function() {
    // randomInt returns an integer value in between 0 and 505 (canvas width)
    var x = randomInt(0, 505);
    var y = this.getNewRow();
    Character.call(this, x, y);
};
var Player = function(x, y, hearts) {
    Character.call(this, x, y);
    this.hearts = hearts;
};

Both Player and Enemy will have prototype properties such as width, height, leftMargin, and a topMargin.

Enemy.prototype.width = 96; 
Enemy.prototype.height = 65; 
Enemy.prototype.leftMargin = 2; 
Enemy.prototype.topMargin = 78; 

Player.prototype.width = 66; 
Player.prototype.height = 75;
Player.prototype.leftMargin = 18;
Player.prototype.topMargin = 64; 

Since both subclasses Player and Enemy have these 4 properties (with different values nonetheless), I feel like this should be refactored somehow, but how? Since every instance of these classes will have the same property values, I do want to leverage the prototype chain and keep them in a prototype object (unless you can explain to me why I shouldn't do this).

Aucun commentaire:

Enregistrer un commentaire