Скопировал фабричные (общие) методы в свойство объекта (жду критики):
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;
});
не думаю что это лучшее решение
и это уже не наследование, а копирование. А значит требует ресурсы памяти