假設我們有一個超類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'類中呢? – Barmar
現在,沒有超類和子類,它們是不相關的...... – passion
@Barmar,因爲如果你只是簡單地將它們添加到'Character'類中,那麼EVERY''''''''''''實例將會擁有這些屬性作爲本地價值(這將佔用內存),我們不會利用原型鏈的力量 – sjbuysse