Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   глобальные или локальные обьекты (https://javascript.ru/forum/offtopic/35122-globalnye-ili-lokalnye-obekty.html)

l-liava-l 31.01.2013 10:47

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

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

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

Или сделать инициализирующую функцию, в которой будут обьявлятся нужные обьекты и функции?

Gozar 31.01.2013 11:27

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

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

Код в студию.

l-liava-l 31.01.2013 13:55

Цитата:

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

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

Код в студию.
Кода как такового нет, мне просто было интересно в каких случаях предпочтительнее использовать тот или иной способ:)
Кажись врубился

DjDiablo 31.01.2013 15:13

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

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

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

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

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

dmitry111 01.02.2013 02:13

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

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

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

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

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


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

dmitry111 01.02.2013 02:22

l-liava-l,

удобно создать один глобальный объект, тогда все модули можно будет размещать в отдельных файлах и подключать по мере надобности

nerv_ 01.02.2013 02:25

Цитата:

Сообщение от 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/

dmitry111 01.02.2013 03:27

nerv_,

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

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

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


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

DjDiablo 01.02.2013 13:42

Цитата:

смотря в каких случаях. Может конструктор создает вспомогательные объекты, необходимые для работы 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        
    })

})

melky 01.02.2013 14:11

Цитата:

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

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

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

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

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

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

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

Цитата:

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

а вот и нет :Р

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

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


Часовой пояс GMT +3, время: 02:38.