Расширить конструктор дополнительными данными
Есть фабрика, в которую добавляются конструкторы:
(function () {
var root = this;
// Фабрика для строительства объектов игры
// создает объект игры указанного типа
// по заданным параметрам
function Factory(type, params) {
if (typeof Factory[type] !== 'function') {
return;
}
return new Factory[type](params);
}
// добавление конструкторов
Factory.add = function (data) {
var name;
for (name in data) {
if (data.hasOwnProperty(name)) {
Factory[name] = data[name];
}
}
};
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = Factory;
}
exports.Factory = Factory;
} else {
if (typeof define === 'function' && define.amd) {
define('Factory', [], function () {
return Factory;
});
} else {
root.Factory = Factory;
}
}
}.call(this));
Необходимо сделать такой функционал, который будет добавлять в один из конструкторов данные, которые будут использоваться при работе с объектом, созданным этим конструктором. Данные должны быть динамическими (могли меняться). То есть функциональность объектов, созданных конструктором может отличаться Как бы вы это сделали? |
|
нет, не то! Там изменяется объект, а мне нужно изменять конструктор
|
То есть расширить Factory[name] параметрами, к которым можно будет обратиться из объекта и которые не затрут внутренние параметры объекта
|
dmitry111, тебе нужно добавить в Factory[name] определенные свойство в зависимости от объекта?
Если да, то как отличаются объекты? Как ты отличаешь какие свойства добавить? |
Цитата:
не в зависимости от объекта! Грубо говоря Factory[name]['foo'] = 'bar' - вполне рабочий вариант. Factory[name]['foo'] = 'bar'; var x = Factory(name); console.log(x.constructor.foo) Сама реализация не нравится |
dmitry111, угу, но зачем это почему не создать базовые классы и не унаследовать методы?
|
Цитата:
var obj = Factory(type, data); тоже не вариант!) Нужно сделать именно дополнительный динамический функционал для конструктора |
Цитата:
|
Цитата:
Так вот эти параметры нужно подгружать и инициализировать в конструкторе при каждой смене карты. Хранить их в самом конструкторе бессмысленно (карты разные), передавать их при создании объекта тоже не катит, потому как карта имеет динамические элементы, которые должны создаваться конструктором в любой момент игры, а так как создают их низкоуровневый код, то ему все равно что создать - что пулю, что ящик в игре.. он просто получает координаты и имя модели |
| Часовой пояс GMT +3, время: 01:36. |