2017-01-30 11 views
0

지금 팩맨 코드를 작성 하려다가 문제가 생겼습니다. 모든 유령이 동일한 길 찾기를 사용하고 일반적으로 꽤 모호하기 때문에 프로토 타입을 사용하고 싶습니다. 그들이 정말로 다른 유일한 속성은 방법이며 목표 위치를 선택합니다. 프로토 타입에 함수를주고 getter로 사용하고 싶습니다. 그게 가능하니? 당신의 도움에 대한프로토 타입에서 getter로 함수 매개 변수를 사용하는 방법이 있습니까?

function Ghost(color,x,y,getterFunction){ 
    this.color = color; 
    this.x = x; 
    this.y = y; 
    this.direction = "up"; 
    this.move = function(){ 
     //Pathfind towards this.target 
    } 
    this.target = getterFunction; //or something like this... 
} 

감사합니다 : ^)

+0

아니요.이 부분이 다를 경우 프로토 타입을 쓰지 않으려 고합니다. – Bergi

+1

'this.target' 대신에'this.target()'을 사용하면 코드가 작동합니다. – Bergi

+0

ES6 클래스 사용을 고려 했습니까? Babel을 사용하여 모든 브라우저에서 작동하도록 코드를 번역 할 수 있습니다. – royalsampler

답변

3

@Bergi는 권리입니다. 당신은 getter로 사용하고 싶지 않습니다. 프로토 타입에 추가하려고하면 프로토 타입이 공유 객체이기 때문에 작성하는 모든 새 유령에 의해 덮어 쓰여집니다.

프로토 타입은 공유 기능을위한 것입니다. 인스턴스 기능은 인스턴스에 포함됩니다 (예 : 생성자 함수에서).

이동 기능은 프로토 타입에 있어야합니다. 그러나 목표는 인스턴스 메소드 여야합니다. 프로토 타입에서 target에 대한 기본 메소드를 설정할 수 있습니다. 모든 인스턴스 메소드는 프로토 타입을 찾기 전에 호출됩니다. 그래서 지금

function Ghost(color, x, y, target){ 
    // everything in here is instance specific 
    this.color = color; 
    this.x = x; 
    this.y = y; 
    this.direction = "up"; 

    if (typeof target === 'function') { 
     this.target = target; 
    } 
} 

// this is the prototype 
Ghost.prototype.move = function() { 
    //Pathfind towards this.target 
    this.target() 
} 

Ghost.prototype.target = function() { 
    // default target to use if no target provided at creation 
} 

예, 당신이 수행

var redGhost = new Ghost('red', 0, 0, function() { 
    //do something unique 
}) 

당신은 빨간색이고 사용자 지정 대상 기능이 유령을해야합니다. 하지만 이렇게하면 :

var yellowGhost = new Ghost('yellow', 0, 0) 

프로토 타입에 추가 한 기본 대상 기능을 사용하는 유령이 생깁니다.

+1

이것은 좋은 대답이지만 일부 샘플 코드의 이점을 실제로 누릴 수 있습니다. –

+1

일부 코드 예제로 수정 된 답변입니다. – shadymoses

+0

이제이 대답은 * awesome *입니다. +++가 다시 upvote 것입니다. –