0

수퍼 클래스가 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, leftMargintopMargin있다.

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 개 가지 속성 (값이 다른 그럼에도 불구하고), 내가 느끼는,하지만 어떻게? 이 클래스의 모든 인스턴스는 동일한 속성 값을 가질 것이므로 프로토 타입 체인을 활용하여 프로토 타입 객체에 보관하고 싶습니다 (왜 이렇게하지 말아야하는지 설명 할 수 없다면).

+0

그 속성이'Player'와'Enemy' 모두에게 공통적이라면, 그것들을'Character' 클래스에 추가해보십시오. – Barmar

+0

지금까지 슈퍼 클래스 나 서브 클래스가 없으므로 관련이 없습니다 ... – passion

+0

@Barmar, 단순히'Character' 클래스에 추가하면 모든'player' 인스턴스와'enemy' 인스턴스가 지역 값 (그리고 그것은 메모리를 차지할 것입니다.) 그리고 우리는 프로토 타입 체인의 힘을 이용하지 않을 것입니다. – sjbuysse

답변

0

여기에 적용 할 특별한 디자인 패턴이 없습니다. 각 프로토 타입에 이러한 속성을 넣는 것이 좋습니다. Character.prototype에 일부 기본값을 배치 할 수도 있습니다. 클래스의 모든 객체가 공유해야하는 인스턴스의 속성이므로 프로토 타입은 해당 객체를 배치하기에 적합한 장소입니다.

할당 할 때 반복을 피하려면 함수에 넣으십시오.

1

나는 이러한 구분을하지 않으며 상속에 전혀 의지하지 않을 것입니다. 나는 상속에 비해 컴포지션을 선호하므로 변경이 발생하면 상속 상자에 잠겨 있지 않습니다. 이 경우 조기 overengering을 고려해보십시오. 객체 자체에 이러한 속성을 저장하여 성능 문제를 실제로 예상합니까? 내 디자인은 x, y, 하트, 너비, 높이, leftMargin, topMargin, type 속성 중 하나 인 Character를 가졌을 것입니다. 이런 식으로 그래서 당신이 당신의 미래의 요구 사항과 일치합니다 매우 유연 일관된 데이터를 가지고 : 형에게 또한 시간의 특정 시점에서 마음을 가질 수

  • 원수를 변경하여 친구에 설정할 수 있습니다
    • , 왜 그들은 안 ?
    • 모든 문자는 너비/높이를 변경하여 확대/축소 할 수 있습니다.
    • 모든 문자는 여백을 변경하여 위치를 변경할 수 있습니다.

    기본적으로 계층 모델을 유지하기 위해 머리카락을 당기지 않고 조작 할 수있는 보편적 인 데이터 구조가 있습니다. 희망이 도움이 될 것입니다.

  • +0

    위대한 조언과 관점, 나는 작곡을 들여다 보겠다. 내가 이것을 "강조"하는 이유는 그것이 학습 프로젝트이고 디자인 패턴에 정말로 관심이 있기 때문입니다. – sjbuysse

    관련 문제