Предположим, у нас есть суперкласс 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», почему бы вам не добавить их в класс «Символ»? – Barmar
К настоящему времени нет суперклассов и подклассов, они не связаны ... – passion
@Barmar, потому что, если вы просто добавите их в класс 'Character', тогда каждый экземпляр' player' и 'enemy' будет хранить эти свойства как локальные значения (и это заняло бы память), и мы не будем использовать мощность прототипных цепей. – sjbuysse