глобальные или локальные обьекты
Доброго времени суток!
Немного не пойму, как предпочтительнее организовать пртранство имён: Использовать 1 глобальный обьект, в свойствах которого будут находится другие обьекты? Или сделать инициализирующую функцию, в которой будут обьявлятся нужные обьекты и функции? |
Смотря для чего.
Если у тебя библиотека, то без глобального объекта ты не обойдешься, иначе к нему не будет доступа. Код в студию. |
Цитата:
Кажись врубился |
обычно есть два глобальных обьекта играющие роль неймспейсов
На примере ExtJs Неймспейс для фреймворка Ext Неймспейс приложения app На прмере jQuery фреймворк/плагины в $ Неймспейс приложения в app других глобальных переменных нет, совершенно нет, ни разу. в app стоит описывать классы, а вот экземпляры классов пихать в обьект неймспейса app крайне нежелательно. Передавайте экземпляры, через конструктор, функции. Где возможно старайтесь свести обмен между компонентами к обмену сообщениями, не прибегая к передачи ссылок на обьекты |
вот я уже много месяцев изучаю и много литературы прочитал про ООП.
Я знаю что и как работает, но не знаю где и как это можно применить( Создать приложение используя объекты это еще осуществимо и понятно. Приложение похоже на дерево, состоящее из веток (модулей). Но для чего нужна функция-конструктор и зачем создавать с помощью нее объекты, зачем наследовать возможности одного объекта другим? Мне кажется это можно задействовать в разработке библиотеки или фреймворка, когда над каким-то элементом осуществляются определенные действия (jquery) Об протопипах, функции-конструкторе пишут везде, мне поначалу казалось что это главная сущность js-кода, сейчас мне начинает казаться что это просто фича, которая при неправильном использовании приведет к еще большей путанице в коде. А классы. Зачем они нужны? Все пишут в js нет классов, но можно их создать - получится убого, зато как в JAVA Может быть я не прав, у меня нет опыта в работе c другими языками( Буду рад если переубедите меня Как строить приложения используя все полезности ООП? Может есть какие-нибудь алгоритмы? |
l-liava-l,
удобно создать один глобальный объект, тогда все модули можно будет размещать в отдельных файлах и подключать по мере надобности |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
nerv_,
благодарю за пример, я по нему пробежался - есть функция конструктор - formula.Unit. Она создает объекты и наделяет их одинаковыми методами и разными свойствами. По сути одни и теже "кролики", но с разными ушами) Но что если моему приложению нужен всего один кролик(который умеет прыгать), а еще нужна, например, черепаха - которая умеет ползать? Создавать новый контруктор для черепахи? И зачем для одного кролика нужна фабрика для создания кроликов? Это я к тому, что, по моему опыту, чаще всего в "зоопарк" приложения требуются животные в единственных экземплярах (возможно я не прав - опыт небольшой :) ) Кстати что делает ваш код? |
Цитата:
собственно пример как можно связать контролёры и модели в MVP, тут реализовано сразу два подхода, app.Model является доступной сразу для двух контролёров в тоже время у каждого контролёра есть своя модель. профит при исчезнавении контролёра модель исчезнет вместе с ним, к томуже неймспейс незахламлён посторонним мусором и содержит только классы. Это неединственный подход, есть и другие которые мне нравятся неменьше. //абстрактные классы с общим для всех контролёров функционалом class("app.Controlller",{ //бла бла }) // модель class("app.Model",{ //бла бла }) //реальные классы экземпляры которых мы будем создавать //контролёр1 class("app.controller1",{ extend:"app.controller", init:function(param){ //ссылка на модель this.model1=param.model; //экземпляр модели существующий только внутри контролёра this.model2=app.myModel1({ }); } //бла бла }) //контролёр2 class("app.controller2",{ extend:"app.controller", init:function(param){ //ссылка на модель this.model1=param.model; //экземпляр модели существующий только внутри контролёра this.model2=app.myModel1({ }); } //бла бла }) //модель class("app.myModel",{ extend:"app.Model" //бла бла }) //модель для внутреннего использования в классе контроллер 1 class("app.myModel1",{ extend:"app.Model" //бла бла }) //модель для внутреннего использования в классе контроллер 2 class("app.myModel2",{ extend:"app.Model" //бла бла }) //в этой функции инициализируется приложение $(function(){ // общая модель для двух контролёров var myModel= new app.myModel({ //инициализация }); // контролёр 1 var contr1 = new app.controller1({ model: myModel }) // контролёр 2 var contr2 = new app.controller2({ model: myModel }) }) |
Цитата:
к примеру, нужно сделать игру арканоид. ты разбиваешь "игру" на "полоску, от которой отражается мячик", "мячик", и "блоки", и "физический мир" (это движок, обрабатывающий всё происходящее, столкновения , например) и вот для всех этих частей ты создаёшь классы (я так называю конструктор + прототип) мячик, как известно, может быть огненным, или ещё каким-нибудь. то, что создан объект "мячик", говорит расплывчато о том, что он вообще есть. нужно уточнить его понятие. для этого ты создаешь класс "огненный мячик", который наследует "простой" - т.е. добавляет новые свойства\методы. таким образом, каждый класс является либо уточнением (расширением) или же составляет какую-либо элементарную единицу приложения, как и все тела разделяются на атомы. Цитата:
при использовании ООП кода пишется в несколько раз больше, чем при декларативном программировании. а оптимизация относится только к корявости реализации функций в JS (я был огорчён производительностью приложения на декларативщине.... хотя, может нужно было прогнать в GCC advanced mode и заинлайнить всё, что можно...) |
Часовой пояс GMT +3, время: 09:30. |