Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.03.2013, 09:08
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Как описывать свойства ООП?
Если какие то методы в процессе работы создают и используют какие-то свойства обьекта, стоит ли эти свойства описывать при конструировании изначально чтобы наглядно показывать что эти свойства как бы ЗАНЯТЫ?

/**
 * Dummy (пустышка) Каркас для обьектов на карте.
 * Дамми умеет перемещаться, имеет позицию, скорость и.т.п.
 * От этого класса наследуют все юниты, их пули, в общем все что есть на карте.
 * @constructor
  ---------------------------------------------------------------------------------*/
function Dummy() {
    this.position = new Position;

  /*ВОТ ТУТ СТОИТ ЛИ ИХ ПИСАТЬ для наглядности?*/
    this.isMoving = null;
    this.startTime = null;
    this.targetPosition = null;
}

Dummy.prototype.getPosition = function () {
        return this.position
};

Dummy.prototype.moveTo = function (targetPosition) {
    this.isMoving = true;
    this.startTime = new Date;
    this.targetPosition = targetPosition;
};



ведь null для этого и создан, чтобы определять предполагаемый обьект. это некая временная заглушка (чтобы запрос не поднимался дальше по цепочке прототипов видимо и не только).

но в таком случае тип предполагаемого обьекта становится не очевидным..... неужели придется писать рядом с каждым таким свойством jsdoc? или смириться с тем что яваскрипт не строго типизированный и если нужны типы то переходить на typescript и.т.п. ? короче ЧАДНТ?

Последний раз редактировалось megaupload, 23.03.2013 в 09:30.
Ответить с цитированием
  #2 (permalink)  
Старый 23.03.2013, 09:35
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Я описываю все возможное свойства в prototype объекта ( = null) и снабжаю JSDoc.
__________________
kobezzza
code monkey
Ответить с цитированием
  #3 (permalink)  
Старый 23.03.2013, 09:38
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

чтобы ускорить создание объектов)?

предполагается что я буду наследовать некоторые клаcсы от других вот так

Unit.prototype = new Dummy;
Unit.prototype.constructor = Unit;


ты предлагаешь после этой записи перечислять свойства?

а вообще логично ли это? не считаешь ли ты что свойства они персональные для каждого обьекта по этому логичнее писать их в конструктор а методы пихать в прототип? не считаешь ли ты что методы, не найдя свойство в обьекте, потянутся искать его в прототипе (пока не переопределят конечно) и это еще более замедлит работу чем "долгая" инициализация?


К тому же уверен ли ты что создатели движков не сделали оптимизации и больше не нужно пихать методы в прототип?


(щас кстати это и проверим)

Последний раз редактировалось megaupload, 23.03.2013 в 09:45.
Ответить с цитированием
  #4 (permalink)  
Старый 23.03.2013, 09:48
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Скорость создания объектов тут не причём, это для параноиков
Просто не люблю я захламлять конструктор, а когда оформляю в прототип, то всё выглядит очень аккуратно.

var Select = new Class(function () {
    // Конструктор
}, {
    /**
     * Свойство
     *
     * @type {?string}
     */
    myProp: null
}, Input /* Родительский класс */);

var select = new Select();


PS: про поиск методов тоже глупость, я отталкиваюсь от реального опыта, а не от абстрактных статей людей не использующих ООП в JS, кароче всё норм)
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 23.03.2013 в 09:51.
Ответить с цитированием
  #5 (permalink)  
Старый 23.03.2013, 09:52
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

ненене покажи пример на нативном js просто устраиваюсь на работу хочу красиво нативно писать.

п.с. оптимизаций не сделали, придется пихать методы по старинке в прототип)

Последний раз редактировалось megaupload, 23.03.2013 в 10:00.
Ответить с цитированием
  #6 (permalink)  
Старый 23.03.2013, 09:57
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Дык тут всё нативно, т.к.

function Class(construct, opt_params, opt_parent) {
	opt_params = opt_params || {};
	construct.base = opt_parent || null;

	if (!opt_parent) {
		Object.extend(true, construct.prototype, opt_params);

	} else {
		Object.extend(true,
			construct.prototype,
			Function.isFunction(opt_parent) ? opt_parent.prototype : opt_parent, opt_params
		);

		construct.prototype.base = opt_parent;
	}

	return construct;
}


Ну, а если совсем просто, то:
function Select() {
}
Object.extend(true, Select.prototype, {
    myProp: null
});


PS: Object.extend это реализация подмешивания, аналог jQuery.extend
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 23.03.2013 в 10:00.
Ответить с цитированием
  #7 (permalink)  
Старый 23.03.2013, 09:59
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от megaupload Посмотреть сообщение
п.с. оптимизаций не сделали, придется пихать методы по старинке в прототип)
Писать нужно, как удобно и легко редактировать. В 90% хитрые оптимизации - лишнее.

Сообщение от megaupload Посмотреть сообщение
и вопрос, ка ты вот это в прототип пихнешь?
this.position = new Position;
В прототиппе свойства определять не нужно (если только это не свойства по умолчанию). В прототипе нужно лишь продекларировать её существование.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 23.03.2013 в 10:02.
Ответить с цитированием
  #8 (permalink)  
Старый 23.03.2013, 10:00
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

и вопрос, ка ты вот это в прототип пихнешь?
this.position = new Position;


Сообщение от kobezzza
Дык тут всё нативно, т.к.
тут не нативно тк ты используешь сахар, а мы и обсуждаем красоту написания без сахаров. напиши без сахара пожалуйста.

Сообщение от kobezzza
В 90% хитрые оптимизации - лишнее.
ну я игру пилю) как портфолио

Последний раз редактировалось megaupload, 23.03.2013 в 10:03.
Ответить с цитированием
  #9 (permalink)  
Старый 23.03.2013, 10:05
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от megaupload Посмотреть сообщение
и вопрос, ка ты вот это в прототип пихнешь?
this.position = new Position;



тут не нативно тк ты используешь сахар, а мы и обсуждаем красоту написания без сахаров. напиши без сахара пожалуйста.


ну я игру пилю) как портфолио
1) Ответил выше;
2) Ну если совсем нативно, то простое перечисление:
prototype.свойство

3) По личному опыту скажу, что в играх тормоза не там К слову типизированные массивы в JS добавили не с проста)
__________________
kobezzza
code monkey
Ответить с цитированием
  #10 (permalink)  
Старый 23.03.2013, 10:17
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Сообщение от kobezzza
1) Ответил выше;
ответь еще раз я не понял как ты это в прототип Unit пихнешь обьект класса Position покажи в коде еще раз

Сообщение от kobezzza
К слову типизированные массивы в JS добавили не с проста)
да да, я тоже читал ту статью)

Последний раз редактировалось megaupload, 23.03.2013 в 10:23.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как использовать sprit'ы? Hekumok Общие вопросы Javascript 17 10.08.2012 11:24
Ползунок как на YouTube и условие. dailclever Элементы интерфейса 1 23.07.2012 19:51
Как различить методы и свойства? возжаждавший Элементы интерфейса 59 12.04.2010 08:33
ООП: как создавать наследника от встроенных объектов? Langalier Общие вопросы Javascript 17 02.02.2009 17:07