Каков наилучший способ сделать параметры общедоступными в заводской функции?

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),
  );
};
Теги:
ecmascript-6
object
factory

2 ответа

0
Лучший ответ

Object.assign ожидает, что объекты в качестве аргументов просто передадут позиции как часть объекта:

return Object.assign({},
    attacker(state),
    renderer(state),
    {
      xPosition,
      yPosition
    }
);
  • 0
    Следует отметить, что числа передаются по значению, а не по ссылке.
  • 0
    Хороший момент, если этот конкретный объект state должен быть постоянным, ваш подход - это путь
Показать ещё 5 комментариев
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 }
);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню