Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.08.2015, 22:19
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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

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


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

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


Как бы вы это сделали?
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2015, 00:24
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

http://www.dofactory.com/javascript/...design-pattern может так?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2015, 10:29
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

нет, не то! Там изменяется объект, а мне нужно изменять конструктор
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2015, 10:35
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

То есть расширить Factory[name] параметрами, к которым можно будет обратиться из объекта и которые не затрут внутренние параметры объекта
Ответить с цитированием
  #5 (permalink)  
Старый 03.08.2015, 10:37
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

dmitry111, тебе нужно добавить в Factory[name] определенные свойство в зависимости от объекта?
Если да, то как отличаются объекты?
Как ты отличаешь какие свойства добавить?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #6 (permalink)  
Старый 03.08.2015, 15:56
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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

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

var x = Factory(name);

console.log(x.constructor.foo)



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

Последний раз редактировалось dmitry111, 04.08.2015 в 09:07.
Ответить с цитированием
  #7 (permalink)  
Старый 03.08.2015, 18:14
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

dmitry111, угу, но зачем это почему не создать базовые классы и не унаследовать методы?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #8 (permalink)  
Старый 03.08.2015, 20:57
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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

var obj = Factory(type, data);


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



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

Последний раз редактировалось dmitry111, 04.08.2015 в 09:07.
Ответить с цитированием
  #9 (permalink)  
Старый 03.08.2015, 21:02
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от dmitry111
Нужно сделать именно дополнительный динамический функционал для конструктора
Зачем? Опиши полностью ситуацию я не до конца понимаю что ты хочешь и зачем?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #10 (permalink)  
Старый 03.08.2015, 21:16
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от cyber
Зачем? Опиши полностью ситуацию я не до конца понимаю что ты хочешь и зачем?
Ок! Есть 2d мультиплеерная игра. В ней вся графика работает на конструкторах. Один конструктор создает пулю, другой игрока. Карты в игре тоже формируются из конструктора. Карт много, они разные и создаются из разных исходников и параметров

Так вот эти параметры нужно подгружать и инициализировать в конструкторе при каждой смене карты. Хранить их в самом конструкторе бессмысленно (карты разные), передавать их при создании объекта тоже не катит, потому как карта имеет динамические элементы, которые должны создаваться конструктором в любой момент игры, а так как создают их низкоуровневый код, то ему все равно что создать - что пулю, что ящик в игре.. он просто получает координаты и имя модели

Последний раз редактировалось dmitry111, 03.08.2015 в 21:21.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение данными html страницу ИлонкаС Общие вопросы Javascript 2 31.07.2015 16:55
Встроить конструктор чехлов в CMS Drupal 6 weboreh Работа 0 05.11.2014 11:23
Практика: Функция конструктор и геттер. Magneto Общие вопросы Javascript 2 07.07.2013 14:01
Java applet и JavaScript - обмен данными Партизан Серверные языки и технологии 3 15.05.2012 16:08