在工厂函数中制作参数 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 }
);