31.01.2013, 10:47
|
Профессор
|
|
Регистрация: 14.03.2012
Сообщений: 1,808
|
|
глобальные или локальные обьекты
Доброго времени суток!
Немного не пойму, как предпочтительнее организовать пртранство имён:
Использовать 1 глобальный обьект, в свойствах которого будут находится другие обьекты?
Или сделать инициализирующую функцию, в которой будут обьявлятся нужные обьекты и функции?
__________________
Научу себя плохому
|
|
31.01.2013, 11:27
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Смотря для чего.
Если у тебя библиотека, то без глобального объекта ты не обойдешься, иначе к нему не будет доступа.
Код в студию.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
31.01.2013, 13:55
|
Профессор
|
|
Регистрация: 14.03.2012
Сообщений: 1,808
|
|
Цитата:
|
Смотря для чего.
Если у тебя библиотека, то без глобального объекта ты не обойдешься, иначе к нему не будет доступа.
Код в студию.
|
Кода как такового нет, мне просто было интересно в каких случаях предпочтительнее использовать тот или иной способ
Кажись врубился
__________________
Научу себя плохому
|
|
31.01.2013, 15:13
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
обычно есть два глобальных обьекта играющие роль неймспейсов
На примере ExtJs
Неймспейс для фреймворка Ext
Неймспейс приложения app
На прмере jQuery
фреймворк/плагины в $
Неймспейс приложения в app
других глобальных переменных нет, совершенно нет, ни разу.
в app стоит описывать классы, а вот экземпляры классов пихать в обьект неймспейса app крайне нежелательно. Передавайте экземпляры, через конструктор, функции. Где возможно старайтесь свести обмен между компонентами к обмену сообщениями, не прибегая к передачи ссылок на обьекты
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 31.01.2013 в 15:50.
|
|
01.02.2013, 02:13
|
|
Профессор
|
|
Регистрация: 26.03.2012
Сообщений: 823
|
|
вот я уже много месяцев изучаю и много литературы прочитал про ООП.
Я знаю что и как работает, но не знаю где и как это можно применить(
Создать приложение используя объекты это еще осуществимо и понятно. Приложение похоже на дерево, состоящее из веток (модулей).
Но для чего нужна функция-конструктор и зачем создавать с помощью нее объекты, зачем наследовать возможности одного объекта другим? Мне кажется это можно задействовать в разработке библиотеки или фреймворка, когда над каким-то элементом осуществляются определенные действия (jquery)
Об протопипах, функции-конструкторе пишут везде, мне поначалу казалось что это главная сущность js-кода, сейчас мне начинает казаться что это просто фича, которая при неправильном использовании приведет к еще большей путанице в коде.
А классы. Зачем они нужны? Все пишут в js нет классов, но можно их создать - получится убого, зато как в JAVA
Может быть я не прав, у меня нет опыта в работе c другими языками(
Буду рад если переубедите меня
Как строить приложения используя все полезности ООП? Может есть какие-нибудь алгоритмы?
Последний раз редактировалось dmitry111, 01.02.2013 в 02:15.
|
|
01.02.2013, 02:22
|
|
Профессор
|
|
Регистрация: 26.03.2012
Сообщений: 823
|
|
l-liava-l,
удобно создать один глобальный объект, тогда все модули можно будет размещать в отдельных файлах и подключать по мере надобности
|
|
01.02.2013, 02:25
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от l-liava-l
|
Немного не пойму, как предпочтительнее организовать пртранство имён:
|
как ни организовывай, получиться
Сообщение от l-liava-l
|
объект, в свойствах которого будут находится другие обьекты
|
Сообщение от dmitry111
|
вот я уже много месяцев изучаю и много литературы прочитал про ООП.
Я знаю что и как работает, но не знаю где и как это можно применить(
|
больше пиши, больше думай )
Сообщение от dmitry111
|
Но для чего нужна функция-конструктор и зачем создавать с помощью нее объекты
|
чтобы не писать много кода + гибкость + оптимизация + код читается проще + (придумай_сам ) Если хочешь, глянь я недавно писал. На выходе получается это. Достаточно простой пример.
Сообщение от DjDiablo
|
а вот экземпляры классов пихать в обьект неймспейса app крайне нежелательно
|
смотря в каких случаях. Может конструктор создает вспомогательные объекты, необходимые для работы app.
Сообщение от dmitry111
|
Мне кажется это можно задействовать в разработке библиотеки или фреймворка, когда над каким-то элементом осуществляются определенные действия (jquery)
|
в других языках модули класса ты описывать заколебешься, + нет той гибкости, что есть в js, в связи с чем js располагает к ООП. Объект на объекте. {} - бац и готово.
Сообщение от dmitry111
|
Как строить приложения используя все полезности ООП? Может есть какие-нибудь алгоритмы?
|
http://www.books.ru/books/javascript...il-pdf-864682/
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 01.02.2013 в 02:45.
|
|
01.02.2013, 03:27
|
|
Профессор
|
|
Регистрация: 26.03.2012
Сообщений: 823
|
|
nerv_,
благодарю за пример, я по нему пробежался - есть функция конструктор - formula.Unit. Она создает объекты и наделяет их одинаковыми методами и разными свойствами. По сути одни и теже "кролики", но с разными ушами)
Но что если моему приложению нужен всего один кролик(который умеет прыгать), а еще нужна, например, черепаха - которая умеет ползать? Создавать новый контруктор для черепахи? И зачем для одного кролика нужна фабрика для создания кроликов?
Это я к тому, что, по моему опыту, чаще всего в "зоопарк" приложения требуются животные в единственных экземплярах (возможно я не прав - опыт небольшой )
Кстати что делает ваш код?
Последний раз редактировалось dmitry111, 01.02.2013 в 03:40.
|
|
01.02.2013, 13:42
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Цитата:
|
смотря в каких случаях. Может конструктор создает вспомогательные объекты, необходимые для работы app.
|
Синглетоны там разместить можно, обьекты вроде конфигов, но неболее.
собственно пример как можно связать контролёры и модели в 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
})
})
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 08.02.2013 в 15:10.
|
|
01.02.2013, 14:11
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от dmitry111
|
Но для чего нужна функция-конструктор и зачем создавать с помощью нее объекты, зачем наследовать возможности одного объекта другим?
|
один объект - компонент ... это такая элементарная частица, на которую ты разбиваешь задачу.
к примеру, нужно сделать игру арканоид. ты разбиваешь "игру" на "полоску, от которой отражается мячик", "мячик", и "блоки", и "физический мир" (это движок, обрабатывающий всё происходящее, столкновения , например)
и вот для всех этих частей ты создаёшь классы (я так называю конструктор + прототип)
мячик, как известно, может быть огненным, или ещё каким-нибудь. то, что создан объект "мячик", говорит расплывчато о том, что он вообще есть. нужно уточнить его понятие.
для этого ты создаешь класс "огненный мячик", который наследует "простой" - т.е. добавляет новые свойства\методы.
таким образом, каждый класс является либо уточнением (расширением) или же составляет какую-либо элементарную единицу приложения, как и все тела разделяются на атомы.
Сообщение от nerv_
|
чтобы не писать много кода + гибкость + оптимизация + код читается проще + (придумай_сам )
|
а вот и нет :Р
при использовании ООП кода пишется в несколько раз больше, чем при декларативном программировании.
а оптимизация относится только к корявости реализации функций в JS (я был огорчён производительностью приложения на декларативщине.... хотя, может нужно было прогнать в GCC advanced mode и заинлайнить всё, что можно...)
Последний раз редактировалось melky, 01.02.2013 в 14:19.
|
|
|
|