Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.02.2018, 10:28
Новичок на форуме
Отправить личное сообщение для mnzi Посмотреть профиль Найти все сообщения от mnzi
 
Регистрация: 16.02.2018
Сообщений: 3

Вызов объекта из анонимной функции. Подскажите как работает код.
Здравствуйте. Наткнулся на такой код.

Не могу понять как работает, это замыкание?

Буду раз любой ссылке или подсказке.

(function(DinePage, $) {
    DinePage.init = function() {
        DinePage.autoResizeTopHeight();

        $(window).resize(function() {
            DinePage.autoResizeTopHeight();
        });

        setTimeout(DinePage.checkResizeHeight, 3000);
    };

    DinePage.autoResizeTopHeight = function() {
        var height = $('.dine-left').outerHeight();
        $('.dine-right').height(height);
    };

    DinePage.hasResized = false;
    DinePage.checkResizeHeight = function() {
        var timer = setInterval(function() {
            if (DinePage.hasResized) {
                clearInterval(timer);
                return;
            }

            DinePage.autoResizeTopHeight();
            DinePage.hasResized = true;
        }, 3000);
    };
})(window.DinePage = window.DinePage || {}, jQuery);


В функцию передается объект, но при этом он не инициализирован.

Вызвается в футере страницы так

$(document).ready(function() {
        DinePage.init();
    });

    $(document).load(function() {
        DinePage.autoResizeTopHeight();
    });


Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2018, 10:46
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от mnzi
Не могу понять как работает, это замыкание?
А где тут замыкание?
Есть только вызов безымянной функции, которой передается два параметра...
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2018, 10:52
Новичок на форуме
Отправить личное сообщение для mnzi Посмотреть профиль Найти все сообщения от mnzi
 
Регистрация: 16.02.2018
Сообщений: 3

Передается $ (библиотка - в моем случае jQuery) и DinePage.

DinePage где-то должен объявляться? Как свойство объекта window? Я могу потом обращаться к нему как к глобальному объекту?

Зачем нужна такая запись через функцию? почему нельзя было объявить просто объект и присвоить свойствам значения функций?

Помогите разобраться пожалуйста.
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2018, 11:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от mnzi
DinePage где-то должен объявляться?
Судя по "конструкции"
Сообщение от mnzi
window.DinePage = window.DinePage || {}
Может и не объявляться... В этом случае будет передана ссылка "пустой" объект в глобальной переменной DinePage.
Сообщение от mnzi
DinePage где-то должен объявляться? Как свойство объекта window?
Если он не объявлен ранее его объявят пустым объектом при вызове
window.DinePage = window.DinePage || {};

Это стандартный прием... Кагбэ значение по умолчанию.
Сообщение от mnzi
Я могу потом обращаться к нему как к глобальному объекту?
Разумеется.
Ответить с цитированием
  #5 (permalink)  
Старый 16.02.2018, 11:04
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от mnzi
DinePage где-то должен объявляться?
Он объявляется как свойство глобального объекта window при вызове функции.
Сообщение от mnzi
Я могу потом обращаться к нему как к глобальному объекту?
После вы можете обращаться к нему, как к любой переменной/объекту в глобальной ОВ.
До этого кода нужно сначала инициализировать этот объект и только после этого работать.

Сообщение от mnzi
Зачем нужна такая запись через функцию? почему нельзя было объявить просто объект и присвоить свойствам значения функций?
Возможно это было сделано для корректной работы объекта.
Если на странице одновременно используется и mootools, и jQuery, то есть вероятность того, что $ будет ссылкой на mootools (или на нечто другое, не являющееся экземпляром jQ).
Других причин я не вижу.

Последний раз редактировалось Nexus, 16.02.2018 в 11:13.
Ответить с цитированием
  #6 (permalink)  
Старый 16.02.2018, 11:05
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от mnzi
Зачем нужна такая запись через функцию? почему нельзя было объявить просто объект и присвоить свойствам значения
Ниндзя стайл!
Ответить с цитированием
  #7 (permalink)  
Старый 16.02.2018, 11:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Nexus
Если на странице одновременно используется и mootools и jQuery, то есть вероятность того, что $ будет ссылкой на mootools.
Это уже про второй параметр...
Ответить с цитированием
  #8 (permalink)  
Старый 16.02.2018, 11:14
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от ksa
Это уже про второй параметр
Ну это все же касается обоих параметров, без второго первый работать как планировалось не будет.
Ответить с цитированием
  #9 (permalink)  
Старый 16.02.2018, 11:32
Новичок на форуме
Отправить личное сообщение для mnzi Посмотреть профиль Найти все сообщения от mnzi
 
Регистрация: 16.02.2018
Сообщений: 3

Огромное спасибо за разъяснения.
Ответить с цитированием
  #10 (permalink)  
Старый 16.02.2018, 11:45
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Nexus
без второго первый работать как планировалось не будет
Разумеется.

Просто я думал, что большее недоумение у ТСа именно по первому параметру...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WTF! Как то странно работает вывод функции Giden jQuery 2 30.05.2014 14:22
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
не работает вызов функции после .animate Giddeon jQuery 5 01.11.2013 00:56
Как работает этот код doox911 Общие вопросы Javascript 11 02.04.2013 01:27
Не работает jquery код на сайте Gvozdb jQuery 1 20.03.2013 11:57