Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.01.2013, 10:47
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

глобальные или локальные обьекты
Доброго времени суток!

Немного не пойму, как предпочтительнее организовать пртранство имён:

Использовать 1 глобальный обьект, в свойствах которого будут находится другие обьекты?

Или сделать инициализирующую функцию, в которой будут обьявлятся нужные обьекты и функции?
__________________
Научу себя плохому
Ответить с цитированием
  #2 (permalink)  
Старый 31.01.2013, 11:27
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Смотря для чего.

Если у тебя библиотека, то без глобального объекта ты не обойдешься, иначе к нему не будет доступа.

Код в студию.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #3 (permalink)  
Старый 31.01.2013, 13:55
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Цитата:
Смотря для чего.

Если у тебя библиотека, то без глобального объекта ты не обойдешься, иначе к нему не будет доступа.

Код в студию.
Кода как такового нет, мне просто было интересно в каких случаях предпочтительнее использовать тот или иной способ
Кажись врубился
__________________
Научу себя плохому
Ответить с цитированием
  #4 (permalink)  
Старый 31.01.2013, 15:13
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

обычно есть два глобальных обьекта играющие роль неймспейсов

На примере ExtJs
Неймспейс для фреймворка Ext
Неймспейс приложения app

На прмере jQuery
фреймворк/плагины в $
Неймспейс приложения в app

других глобальных переменных нет, совершенно нет, ни разу.

в app стоит описывать классы, а вот экземпляры классов пихать в обьект неймспейса app крайне нежелательно. Передавайте экземпляры, через конструктор, функции. Где возможно старайтесь свести обмен между компонентами к обмену сообщениями, не прибегая к передачи ссылок на обьекты
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 31.01.2013 в 15:50.
Ответить с цитированием
  #5 (permalink)  
Старый 01.02.2013, 02:13
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

вот я уже много месяцев изучаю и много литературы прочитал про ООП.
Я знаю что и как работает, но не знаю где и как это можно применить(

Создать приложение используя объекты это еще осуществимо и понятно. Приложение похоже на дерево, состоящее из веток (модулей).
Но для чего нужна функция-конструктор и зачем создавать с помощью нее объекты, зачем наследовать возможности одного объекта другим? Мне кажется это можно задействовать в разработке библиотеки или фреймворка, когда над каким-то элементом осуществляются определенные действия (jquery)

Об протопипах, функции-конструкторе пишут везде, мне поначалу казалось что это главная сущность js-кода, сейчас мне начинает казаться что это просто фича, которая при неправильном использовании приведет к еще большей путанице в коде.

А классы. Зачем они нужны? Все пишут в js нет классов, но можно их создать - получится убого, зато как в JAVA

Может быть я не прав, у меня нет опыта в работе c другими языками(
Буду рад если переубедите меня


Как строить приложения используя все полезности ООП? Может есть какие-нибудь алгоритмы?

Последний раз редактировалось dmitry111, 01.02.2013 в 02:15.
Ответить с цитированием
  #6 (permalink)  
Старый 01.02.2013, 02:22
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

l-liava-l,

удобно создать один глобальный объект, тогда все модули можно будет размещать в отдельных файлах и подключать по мере надобности
Ответить с цитированием
  #7 (permalink)  
Старый 01.02.2013, 02:25
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 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.
Ответить с цитированием
  #8 (permalink)  
Старый 01.02.2013, 03:27
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

nerv_,

благодарю за пример, я по нему пробежался - есть функция конструктор - formula.Unit. Она создает объекты и наделяет их одинаковыми методами и разными свойствами. По сути одни и теже "кролики", но с разными ушами)

Но что если моему приложению нужен всего один кролик(который умеет прыгать), а еще нужна, например, черепаха - которая умеет ползать? Создавать новый контруктор для черепахи? И зачем для одного кролика нужна фабрика для создания кроликов?

Это я к тому, что, по моему опыту, чаще всего в "зоопарк" приложения требуются животные в единственных экземплярах (возможно я не прав - опыт небольшой )


Кстати что делает ваш код?

Последний раз редактировалось dmitry111, 01.02.2013 в 03:40.
Ответить с цитированием
  #9 (permalink)  
Старый 01.02.2013, 13:42
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 01.02.2013, 14:11
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от dmitry111
Но для чего нужна функция-конструктор и зачем создавать с помощью нее объекты, зачем наследовать возможности одного объекта другим?
один объект - компонент ... это такая элементарная частица, на которую ты разбиваешь задачу.

к примеру, нужно сделать игру арканоид. ты разбиваешь "игру" на "полоску, от которой отражается мячик", "мячик", и "блоки", и "физический мир" (это движок, обрабатывающий всё происходящее, столкновения , например)

и вот для всех этих частей ты создаёшь классы (я так называю конструктор + прототип)

мячик, как известно, может быть огненным, или ещё каким-нибудь. то, что создан объект "мячик", говорит расплывчато о том, что он вообще есть. нужно уточнить его понятие.

для этого ты создаешь класс "огненный мячик", который наследует "простой" - т.е. добавляет новые свойства\методы.

таким образом, каждый класс является либо уточнением (расширением) или же составляет какую-либо элементарную единицу приложения, как и все тела разделяются на атомы.

Сообщение от nerv_
чтобы не писать много кода + гибкость + оптимизация + код читается проще + (придумай_сам )
а вот и нет :Р

при использовании ООП кода пишется в несколько раз больше, чем при декларативном программировании.

а оптимизация относится только к корявости реализации функций в JS (я был огорчён производительностью приложения на декларативщине.... хотя, может нужно было прогнать в GCC advanced mode и заинлайнить всё, что можно...)

Последний раз редактировалось melky, 01.02.2013 в 14:19.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтоб ссылка появлялась один раз для каждого пользователя (по IP или Cookies) Sequoia Общие вопросы Javascript 2 28.01.2010 19:16
Игра орел или решка на jquery. В любом случаи выводит вы проиграли! Dimaz jQuery 4 25.12.2009 15:04
Удалить ряд символов перед или после курсора до определенного сивола brd Javascript под браузер 3 30.10.2009 08:20
Как определить цвет (темный он или светлый)? mouse_web Элементы интерфейса 6 22.07.2009 14:35
Как узнать свернуто окно браузера или нет. bar-boss Events/DOM/Window 3 25.09.2008 16:09