Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2012, 22:07
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

вопрос про анонимную функцию
var Controller = {};
(Controller.user = function($)
{
/ * какой-то код */
})(jQuery);
В книге написано, что используется анонимная функция для инкапсулирования области действия и предотвращения загрязнения глобальной области действия.
вопрос такой, зачем ее засовывать в анонимную функцию, если все что находится внутри Controller.user находится в области деятсвия объекта Controller? т.е по идее глобальный объект не зосорится.... объясните пожалуйста великие гуру)
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2012, 22:23
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

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

Последний раз редактировалось dmitriymar, 18.06.2012 в 22:26.
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2012, 22:42
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

Сообщение от Maxmaxmахimus Посмотреть сообщение
ни че не понял че за бред написал в виде "кода", но короче в функции оборачивают что-то чтобы создавать там переменные и они не были видны в глобальной области видимости.

(function(){
var q = 11;
})()

q // undefined
Сорри, забыл вставить в "код".
Это понятно, просто не понятно почему он оборачивает Controller.user, а не сам Controller.
(function(){
var Controller = {};
Controller.user = ...
})()
Ответить с цитированием
  #4 (permalink)  
Старый 19.06.2012, 08:38
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

Сообщение от Maxmaxmахimus Посмотреть сообщение
ты что слепой? вторая строчка
ты спокойнее будь, не обязательн так отвечать
Ответить с цитированием
  #5 (permalink)  
Старый 19.06.2012, 10:19
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от noname1990
var Controller = {};
(Controller.user = function($)
{
/ * какой-то код */
})(jQuery);

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

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

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

для большего просветления, можно написать псевдокод:
var Controller = {};
Controller.user = (function($) {
    var private; // приват.
    return { readOnly: private }
})(jQuery);


и тут я заметил одно ... скобка та не там стоит. ТС написал текстом одно, а в коде другое совершенно

var Controller = {};
(Controller.user = function($)
{
/ * какой-то код */
})(jQuery);

// ----> 
var Controller = {};
(Controller.user = function($) {/ * какой-то код */ })(jQuery);

здесь вообще просто вызывается функция, которая записалась как метод Controller.
КОд аналогичен следующему:
var Controller = {};
Controller.user = function($) {/ * какой-то код */ };
Controller.user(jQuery);
Ответить с цитированием
  #6 (permalink)  
Старый 19.06.2012, 10:28
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,589

noname1990,
вы не находите ,что разница между первым и втором вариантами одного кода из книжки глобальная?
Ответить с цитированием
  #7 (permalink)  
Старый 19.06.2012, 10:37
Интересующийся
Отправить личное сообщение для noname1990 Посмотреть профиль Найти все сообщения от noname1990
 
Регистрация: 04.05.2012
Сообщений: 18

второй вариант это мой, я просто спросил почему нельзя сделать так, т.е обернуть весь Controller.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про сравнения san4es Javascript под браузер 4 01.04.2012 15:56
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 14.07.2011 23:13
Вопрос: И опять про offsetLeft... sigurd Общие вопросы Javascript 11 04.10.2010 13:06
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 13:50
вопрос про <select> Krondor Общие вопросы Javascript 2 25.11.2009 16:04