在工厂函数中公开参数的最佳方法是什么?

时间:2017-09-19 15:38:29

标签: javascript object ecmascript-6 factory

我的工厂功能/ mixin粘贴在下面工作,但我无法从外部访问任何参数。

我试图像这样返回xPositionyPosition,但它不起作用。

    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),
  );
};

2 个答案:

答案 0 :(得分:0)

Object.assign期望将对象作为其参数,因此只需将位置作为对象的一部分传递:

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

答案 1 :(得分: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;}      
  }
);

然而,虽然使用吸气剂和定位器是合理的,但在我看来,它的设计模式很差。也许你宁愿相信周围的人也能遵循_惯例......

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