Допустим, у нас есть суперкласс Character
и 2 подкласса Player
и 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;
};
И Player
, и Enemy
будут иметь свойства прототипа, такие как width
, height
, leftMargin
и 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;
Поскольку оба подкласса Player
и Enemy
имеют эти 4 свойства (тем не менее, с разными значениями), я чувствую, что это нужно как-то реорганизовать, но как? Поскольку каждый экземпляр этих классов будет иметь одинаковые значения свойств, я хочу использовать цепочку прототипов и хранить их в объекте-прототипе (если только вы не объясните мне, почему я не должен этого делать).
Player
иEnemy
, почему бы вам не добавить их в классCharacter
? - person Barmar   schedule 19.09.2016Character
, то КАЖДЫЙ экземплярplayer
иenemy
будет хранить эти свойства как локальные значения (и это займет память), и мы не будем использовать возможности цепочек прототипов. - person sjbuysse   schedule 19.09.2016Enemies
? Итак, вам нужен способ указать, что каждый подклассCharacter
имеет эти общеклассовые свойства, но они специфичны для подкласса. - person Barmar   schedule 19.09.2016Player
иEnemy
имеют эти свойства прототипа, мне кажется, что есть возможность для рефакторинга. - person sjbuysse   schedule 19.09.2016function setSize(obj, w, h, l, t) { obj.prototype.width = w; /*etc*/ }
, а затемsetSize(Enemy, 96, 65, 2, 78); setSize(Player, 66, 75, 18, 64);
. - person nnnnnn   schedule 19.09.2016