2017-09-19 2 views
1

아래에 공장 기능/mixin을 붙여 넣었지만 외부의 매개 변수에 액세스 할 수 없습니다.팩토리 함수에서 매개 변수를 공개하는 가장 좋은 방법은 무엇입니까?

xPosition, yPosition을 반환하려고했지만 작동하지 않았습니다.

return Object.assign({}, 
    attacker(state), 
    renderer(state), 
    xPosition, 
    yPosition 
); 

개체에 포함 된 특수한 방법을 쓰지 않아도 좀비를 움직일 수 있기를 바랍니다.

가능한 한 공장을 최대한 유지하고 싶습니다.

모든 것이 ES6 모듈에 있으므로 어쨌든 나머지 코드에만 적용됩니다.

고맙습니다!

var zombie = createZombie (100,100); 

var renderer = function renderer(state) { 
return { 
    render() { 
     ... 
    } 
    }; 
}; 

var createZombie = function createZombie(xPosition, yPosition) { 

var state = { 
    status: 1, 
    width: 10, 
    height: 10, 
    xPosition, 
    yPosition, 
    angle: 0, 
    color: "green" 
}; 

return Object.assign({}, 
    attacker(state), 
    renderer(state), 
); 
}; 

답변

0

Object.assign는 인수로 객체가 그래서 그냥 객체의 한 부분으로 위치를 통과 기대 :

return Object.assign({}, 
    attacker(state), 
    renderer(state), 
    { 
     xPosition, 
     yPosition 
    } 
); 
+0

하나가 정확한'state' 객체 인 경우 번호가 .. 참조가 아닌 값에 의해 전달 –

+0

좋은 지적되는 점에 유의해야한다 ... 사람을 믿을 수 귀하의 접근 방식은 갈 길이 요 – nem035

+0

조나스, 나는 "당신이 의미에서 무엇을 의미하는지 이해하지 못합니다." 내 프로그램? – Sumomo

0
return Object.assign({}, 
    attacker(state), 
    renderer(state), 
    { 
    get xPosition(){ return state.xPosition;}, 
    set xPosition(v){ return state.xPosition = v;},  
    get yPosition(){ return state.yPosition;},  
    set yPosition(v){ return state.yPosition = v;}  
    } 
); 

그러나 getter 및 setter를 사용하는 것은에서 그럴듯하게 그 가난한 디자인 패턴이있는 동안 내 의견. 당신이 _ 규칙을 따라 주위에 아마 당신은 오히려

return Object.assign({}, 
    attacker(state), 
    renderer(state), 
    { _state: state } 
); 
관련 문제