глобальные или локальные обьекты
Доброго времени суток!
Немного не пойму, как предпочтительнее организовать пртранство имён: Использовать 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, время: 14:26. |