23.03.2013, 09:08
|
|
Профессор
|
|
Регистрация: 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.
|
|
23.03.2013, 09:35
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Я описываю все возможное свойства в prototype объекта ( = null) и снабжаю JSDoc.
|
|
23.03.2013, 09:38
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
чтобы ускорить создание объектов)?
предполагается что я буду наследовать некоторые клаcсы от других вот так
Unit.prototype = new Dummy;
Unit.prototype.constructor = Unit;
ты предлагаешь после этой записи перечислять свойства?
а вообще логично ли это? не считаешь ли ты что свойства они персональные для каждого обьекта по этому логичнее писать их в конструктор а методы пихать в прототип? не считаешь ли ты что методы, не найдя свойство в обьекте, потянутся искать его в прототипе (пока не переопределят конечно) и это еще более замедлит работу чем "долгая" инициализация?
К тому же уверен ли ты что создатели движков не сделали оптимизации и больше не нужно пихать методы в прототип?
(щас кстати это и проверим)
Последний раз редактировалось megaupload, 23.03.2013 в 09:45.
|
|
23.03.2013, 09:48
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Скорость создания объектов тут не причём, это для параноиков
Просто не люблю я захламлять конструктор, а когда оформляю в прототип, то всё выглядит очень аккуратно.
var Select = new Class(function () {
// Конструктор
}, {
/**
* Свойство
*
* @type {?string}
*/
myProp: null
}, Input /* Родительский класс */);
var select = new Select();
PS: про поиск методов тоже глупость, я отталкиваюсь от реального опыта, а не от абстрактных статей людей не использующих ООП в JS, кароче всё норм)
Последний раз редактировалось kobezzza, 23.03.2013 в 09:51.
|
|
23.03.2013, 09:52
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
ненене покажи пример на нативном js просто устраиваюсь на работу хочу красиво нативно писать.
п.с. оптимизаций не сделали, придется пихать методы по старинке в прототип)
Последний раз редактировалось megaupload, 23.03.2013 в 10:00.
|
|
23.03.2013, 09:57
|
|
Быдлокодер;)
|
|
Регистрация: 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, 23.03.2013 в 10:00.
|
|
23.03.2013, 09:59
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от megaupload
|
п.с. оптимизаций не сделали, придется пихать методы по старинке в прототип)
|
Писать нужно, как удобно и легко редактировать. В 90% хитрые оптимизации - лишнее.
Сообщение от megaupload
|
и вопрос, ка ты вот это в прототип пихнешь?
this.position = new Position;
|
В прототиппе свойства определять не нужно (если только это не свойства по умолчанию). В прототипе нужно лишь продекларировать её существование.
Последний раз редактировалось kobezzza, 23.03.2013 в 10:02.
|
|
23.03.2013, 10:00
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
и вопрос, ка ты вот это в прототип пихнешь?
this.position = new Position;
Сообщение от kobezzza
|
Дык тут всё нативно, т.к.
|
тут не нативно тк ты используешь сахар, а мы и обсуждаем красоту написания без сахаров. напиши без сахара пожалуйста.
Сообщение от kobezzza
|
В 90% хитрые оптимизации - лишнее.
|
ну я игру пилю) как портфолио
Последний раз редактировалось megaupload, 23.03.2013 в 10:03.
|
|
23.03.2013, 10:05
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от megaupload
|
и вопрос, ка ты вот это в прототип пихнешь?
this.position = new Position;
тут не нативно тк ты используешь сахар, а мы и обсуждаем красоту написания без сахаров. напиши без сахара пожалуйста.
ну я игру пилю) как портфолио
|
1) Ответил выше;
2) Ну если совсем нативно, то простое перечисление:
prototype.свойство
3) По личному опыту скажу, что в играх тормоза не там К слову типизированные массивы в JS добавили не с проста)
|
|
23.03.2013, 10:17
|
|
Профессор
|
|
Регистрация: 18.01.2013
Сообщений: 1,098
|
|
Сообщение от kobezzza
|
1) Ответил выше;
|
ответь еще раз я не понял как ты это в прототип Unit пихнешь обьект класса Position покажи в коде еще раз
Сообщение от kobezzza
|
К слову типизированные массивы в JS добавили не с проста)
|
да да, я тоже читал ту статью)
Последний раз редактировалось megaupload, 23.03.2013 в 10:23.
|
|
|
|