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

Rise 04.08.2015 08:01

Цитата:

Сообщение от dmitry111 (Сообщение 382666)
51 строка должна быть

var soldier = Factory('Soldier', 'Vasya');

см. пост 11

dmitry111 04.08.2015 09:08

Цитата:

Сообщение от Rise (Сообщение 382667)
см. пост 11

да я там выше ошибся. поправил

Rise 04.08.2015 10:14

Цитата:

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

Не понятно про "динамические элементы", пример приведи конструктора карты с такими элементами и как они там проявляют свою динамичность.

dmitry111 04.08.2015 11:23

Цитата:

Сообщение от Rise
Не понятно про "динамические элементы", пример приведи конструктора карты с такими элементами и как они там проявляют свою динамичность.


изначально карта отрисовывалась из тайлов и общая картинка карты не изменялась Все данные для карты передавались при инициализации (то есть только один раз).

Теперь же, с появлением динамических элементов появилась необходимось создавать небольшие "куски" карты после инициализации, которые могли участвовать в игре - динамические. Например ящик, который можно будет подвинуть. Для них и нужны эти данные.

Rise 05.08.2015 04:35

dmitry111, а почему наследовать нельзя, передавать в момент создания объекта нельзя? в прототипы тоже под запретом?)

dmitry111 05.08.2015 09:13

Rise, наследовать не удобно потому как конструкторы грузятся все и сразу и не имеют строгих имен. Я могу опознать конструктор карт в момент инициализации карты. Мне приходит название конструктора и данные, по ним я и ориентируюсь

Rise 05.08.2015 22:06

dmitry111,
Factory[name] = data[name];
Factory[name].prototype.data = function (name, value) {
  var constr = this.constructor;
  if (value !== undefined) constr[name] = value;
  return constr[name];
};

dmitry111 06.08.2015 15:31

Rise,

спасибо!

а как добавить свойства не создавая экземпляр?

Rise 06.08.2015 23:54

dmitry111, так например:
Factory.add = function (data) {
	var name, constr, link = this.data;
	for (name in data) {
		if (data.hasOwnProperty(name)) {
			constr = this[name] = data[name];
			constr.data = constr.prototype.data = link;
		}
	}
};
Factory.data = function (name, value) {
	var constr = (typeof this !== 'function') ? this.constructor : this;
	return (value !== undefined) ? constr[name] = value : constr[name];
};
// (Constructor|Instance).data(name) get the constructor's name value
// (Constructor|Instance).data(name, value) set the constructor's name value and return it

dmitry111 07.08.2015 23:26

Rise,

да, вроде то что надо. Спасибо!


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