Расширить конструктор дополнительными данными
Есть фабрика, в которую добавляются конструкторы:
(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, время: 06:49. |