在工厂函数中制作参数 public 的最佳方法是什么?
What is the best way to make parameters public in a factory function?
我在下方粘贴了工厂 function/mixin,但我无法从外部访问任何参数。
我试过 return 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;}
}
);
然而,虽然使用 getter 和 setter 是合理的,但在我看来这是一种糟糕的设计模式。也许你更愿意相信你周围的人会遵守_约定...
return Object.assign({},
attacker(state),
renderer(state),
{ _state: state }
);
我在下方粘贴了工厂 function/mixin,但我无法从外部访问任何参数。
我试过 return 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;}
}
);
然而,虽然使用 getter 和 setter 是合理的,但在我看来这是一种糟糕的设计模式。也许你更愿意相信你周围的人会遵守_约定...
return Object.assign({},
attacker(state),
renderer(state),
{ _state: state }
);