У меня есть заводская функция /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),
);
};
Object.assign
ожидает, что объекты в качестве аргументов просто передадут позиции как часть объекта:
return Object.assign({},
attacker(state),
renderer(state),
{
xPosition,
yPosition
}
);
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;}
}
);
Однако, хотя использование геттеров и сеттеров правдоподобно, на мой взгляд, это плохая структура дизайна. Возможно, вы могли бы доверять окружающим людям, чтобы следовать за конвенцией...
return Object.assign({},
attacker(state),
renderer(state),
{ _state: state }
);
state
должен быть постоянным, ваш подход - это путь