|
Как описывать свойства ООП?
Если какие то методы в процессе работы создают и используют какие-то свойства обьекта, стоит ли эти свойства описывать при конструировании изначально чтобы наглядно показывать что эти свойства как бы ЗАНЯТЫ?
/** * 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 и.т.п. ? короче ЧАДНТ? |
Я описываю все возможное свойства в prototype объекта ( = null) и снабжаю JSDoc.
|
чтобы ускорить создание объектов)?
предполагается что я буду наследовать некоторые клаcсы от других вот так Unit.prototype = new Dummy; Unit.prototype.constructor = Unit; ты предлагаешь после этой записи перечислять свойства? а вообще логично ли это? не считаешь ли ты что свойства они персональные для каждого обьекта по этому логичнее писать их в конструктор а методы пихать в прототип? не считаешь ли ты что методы, не найдя свойство в обьекте, потянутся искать его в прототипе (пока не переопределят конечно) и это еще более замедлит работу чем "долгая" инициализация? К тому же уверен ли ты что создатели движков не сделали оптимизации и больше не нужно пихать методы в прототип? (щас кстати это и проверим) |
Скорость создания объектов тут не причём, это для параноиков :)
Просто не люблю я захламлять конструктор, а когда оформляю в прототип, то всё выглядит очень аккуратно. var Select = new Class(function () { // Конструктор }, { /** * Свойство * * @type {?string} */ myProp: null }, Input /* Родительский класс */); var select = new Select(); PS: про поиск методов тоже глупость, я отталкиваюсь от реального опыта, а не от абстрактных статей людей не использующих ООП в JS, кароче всё норм) |
ненене покажи пример на нативном js просто устраиваюсь на работу хочу красиво нативно писать.
п.с. оптимизаций не сделали, придется пихать методы по старинке в прототип) |
Дык тут всё нативно, т.к.
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 |
Цитата:
Цитата:
|
и вопрос, ка ты вот это в прототип пихнешь?
this.position = new Position; Цитата:
Цитата:
|
Цитата:
2) Ну если совсем нативно, то простое перечисление: prototype.свойство 3) По личному опыту скажу, что в играх тормоза не там :) К слову типизированные массивы в JS добавили не с проста) |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 01:45. |
|