Показать сообщение отдельно
  #2 (permalink)  
Старый 12.09.2013, 04:35
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 04.05.2013
Сообщений: 45

Скопировал фабричные (общие) методы в свойство объекта (жду критики):

define(['TankModel', 'ShipModel'], function (Tank, Ship) {
  // Factory GameModel
  function GameModel() {}

  // общие методы, которые наследуются всеми
  GameModel.prototype.getType = function () {
     console.log('this getType');
  };

  // фабричный метод
  // type - тип конструктора
  // params - данные для конструктора
  GameModel.factory = function (type, params) {
    var object;

    // вывести ошибку, если конструктор
    // для запрошенного типа отсутствует
    if (typeof GameModel[type] !== 'function') {
      throw {
        name: 'Error',
        message: type + ' не существует'
      }
    }

    // тут возвращается объект от конструктора.
    // В качестве аргумента идет прототип объект,
    // который сохраняется в свойство объекта
    object = new GameModel[type](GameModel.prototype);

    // работа с готовым объектом:

    // это метод конструктора
    object.initialize(params);

    // это метод фабрики
    // все методы фабрики скопированы
    // при инициализации объекта
    // и доступны как object.gameModel['метод']()
    object.gameModel.getType();

    return object;
  };

  // делает танки
  GameModel.tank = Tank;

  // делает корабли
  GameModel.ship = Ship;

  return GameModel;
});




не думаю что это лучшее решение
и это уже не наследование, а копирование. А значит требует ресурсы памяти

Последний раз редактировалось Murdoc, 12.09.2013 в 17:45.
Ответить с цитированием