수퍼 클래스가 Character
이고 서브 클래스가 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' 클래스에 추가하면 모든'player' 인스턴스와'enemy' 인스턴스가 지역 값 (그리고 그것은 메모리를 차지할 것입니다.) 그리고 우리는 프로토 타입 체인의 힘을 이용하지 않을 것입니다. – sjbuysse