Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Расширить конструктор дополнительными данными (https://javascript.ru/forum/offtopic/57414-rasshirit-konstruktor-dopolnitelnymi-dannymi.html)

dmitry111 02.08.2015 22:19

Расширить конструктор дополнительными данными
 
Есть фабрика, в которую добавляются конструкторы:

(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));


Необходимо сделать такой функционал, который будет добавлять в один из конструкторов данные, которые будут использоваться при работе с объектом, созданным этим конструктором.

Данные должны быть динамическими (могли меняться). То есть функциональность объектов, созданных конструктором может отличаться


Как бы вы это сделали?

cyber 03.08.2015 00:24

http://www.dofactory.com/javascript/...design-pattern может так?

dmitry111 03.08.2015 10:29

нет, не то! Там изменяется объект, а мне нужно изменять конструктор

dmitry111 03.08.2015 10:35

То есть расширить Factory[name] параметрами, к которым можно будет обратиться из объекта и которые не затрут внутренние параметры объекта

cyber 03.08.2015 10:37

dmitry111, тебе нужно добавить в Factory[name] определенные свойство в зависимости от объекта?
Если да, то как отличаются объекты?
Как ты отличаешь какие свойства добавить?

dmitry111 03.08.2015 15:56

Цитата:

Сообщение от cyber
dmitry111, тебе нужно добавить в Factory[name] определенные свойство в зависимости от объекта?
Если да, то как отличаются объекты?
Как ты отличаешь какие свойства добавить?


не в зависимости от объекта!
Грубо говоря Factory[name]['foo'] = 'bar' - вполне рабочий вариант.
Factory[name]['foo'] = 'bar';

var x = Factory(name);

console.log(x.constructor.foo)



Сама реализация не нравится

cyber 03.08.2015 18:14

dmitry111, угу, но зачем это почему не создать базовые классы и не унаследовать методы?

Rise 03.08.2015 20:54

dmitry111, а зачем это надо? поподробнее...

dmitry111 03.08.2015 20:57

Цитата:

Сообщение от cyber
dmitry111, угу, но зачем это почему не создать базовые классы и не унаследовать методы?

не вариант! Это не должно выглядеть как наследование. К конструктуру наследуются не методы, а свойства. Вариант передавать их в момент создания объекта:

var obj = Factory(type, data);


тоже не вариант!)



Нужно сделать именно дополнительный динамический функционал для конструктора

cyber 03.08.2015 21:02

Цитата:

Сообщение от dmitry111
Нужно сделать именно дополнительный динамический функционал для конструктора

Зачем? Опиши полностью ситуацию я не до конца понимаю что ты хочешь и зачем?


Часовой пояс GMT +3, время: 17:16.