войти зарегистрироваться

JavaScriptСамовызывающийся конструктор Джона Резига и размышление о том, почему это решение не прижилось

Настала пора мысленно вернуться на четыре с небольшим года назад ко блогозаписи «Simple “Class” Instantiation» из блога Джона Резига, прославленного создателя необыкновенно удобной библиотеки jQuery. И вернёмся.

Однако же, так как я вовсе не вижу её в результатах поиска на Хабрахабре по слову «Resig», то поневоле приходится думать, что эту полезную блогозапись никто не удосужился перевести (или хотя бы пересказать) за четыре прошедших года — мне придётся, стало быть, самостоятельно пересказать блогозапись Резига прежде, чем я исполню моё главное намерение: поразмыслить вслух, почему же предложенный Резигом способ решения указанной им проблемы так и не сделался общераспространённым. И перескажу. (Сам этот пересказ ужé был бы полезен читателю, даже кабы я к нему ничего от себя не прибавил. А я прибавлю.)



Шестого декабря 2007 года Резиг рассмотрел, что получается, когда в джаваскрипте используется операция «new» для создания объекта (в языках с классами мы сказали бы «экземпляра класса»):

function User(first, last){
   this.name = first + " " + last;
}

var user = new User("John", "Resig");

Резиг справедливо подметил, что для начинающих программистов на джаваскрипте не вполне очевидно, что появление «this» в коде функции указывает на то, что перед нами конструктор объекта. (Я от себя в скобках прибавлю: если функция находится в недрах некоторой библиотеки, то это обстоятельство нуждается также и в документировании — а не то пользователь библиотеки не многим будет отличаться от новичка: исходный код с телом функции читают не все, тем более что он нередко применяется в минифицированном, не читаемом виде.)

Поэтому, рассудил Резиг, рано или поздно кто-нибудь попробует вызвать «User()» без «new» и тем получит на свою голову сразу две неприятные проблемы. Во-первых, переменная «user» останется неопределённою: функция «User()» задумана ведь как конструктор, а значения она никакого не возвращает. Во-вторых, что ещё хуже, попытки обращения к «this» изнутри такого (некорректно вызванного) конструктора неизбежно приведёт к засорению глобального пространства имён — а это чревато зловещими и трудноуловимыми последствиями. Обе проблемы Джон Резиг продемонстрировал на примере:

var name = "Resig";
var user = User("John", name);
// здесь переменная «user» не определена
// БОЛЕЕ ТОГО: значение «name» теперь ужé не «Resig»!
if ( name == "John Resig" ) {
   // фигассе!…
}

jQueryJohn Resig для usesthis.com

Интервью с Джоном Резигом, опубликованное 25 июля на usesthis.com
image

Кто вы и чем занимаетесь?


Я JavaScript программист. Я работаю в Khan Academy, разрабатываю обучающую систему следующего поколения. Я создатель и главный разработчик JavaScript библиотеки jQuery и автор двух книг о JavaScript – «Pro JavaScript Techniques» и «Secrets of the JavaScript Ninja».

jQueryJohn Resig уходит из Mozilla Corporation


Вчера John Resig, создатель jQuery, в своём блоге известил о том, что он покидает Mozilla Corporation, а также рассказал о работе в корпорации и о своих планах на будущее.

Подкасты«Сделайте мне красиво!» Выпуск №27

Вашему вниманию очередной выпуск подкаста о веб-разработке «Сделайте мне красиво!»

Show notes:


Наши ссылки: RSS и лента на rpod.ru
прослушан 121 раз

Подкасты«Сделайте мне красиво!» Выпуск №26

Вашему вниманию очередной выпуск подкаста о веб-разработке «Сделайте мне красиво!»

Show notes:


Наши ссылки: RSS и лента на rpod.ru
прослушан 118 раз

jQueryНовая версия: jQuery 1.5.1

[логотип jQuery]Джон Резиг позавчера (24 февраля) объявил во блоге jQuery о выходе очередной версии jQuery, получившей номер 1.5.1. Для скачивания, как и всегда, доступны два варианта исходного кода: обыкновенный (212 килобайтов) и мини-вариант (уменьшается до 29 килобайтов, если обработать его gzip).

Резиг перечислил сорок два основных изменения, которые были внесены в эту версию jQuery. В основном они сводятся к обезжучиванию, к избавлению от багов. Но есть и одно видимое изменение — в jQuery.ajax() добавили три новые настройки:

1) Настройка isLocal управляет осознанием используемого протокола в качестве локального, то есть позволяет дополнить автораспознавание jQuery, которое в настоящее время считает локальными только те ресурсы, которые загружаются по протоколам «file», «*-extension» (например, «chrome-extension», см. баг 8152) и «widget».

2) Настройка mimeType позволяет переопределить MIME-тип, используемый в XHR.

3) Настройка xhrFields позволяет передать массив необходимых установок (для каждой указав fieldName и fieldValue, то есть имя и значение некоторого поля) в объект XHR. Скажем, можно придать withCredentials значение true, если понадобится запросить сервер из другого домена и послать туда логин, пароль и cookies (в MDC есть пример JS-кода без jQuery для Firefox — можете на этом примере постигнуть, что именно будет такой настройкою достигнуто).

Эта версия (jQuery 1.5.1) — первая из тех, которые поддерживают IE9 настоящим образом: все проблемы, ранее имевшиеся в работе с IE9, либо исправлены в jQuery, либо переданы разработчикам IE9 для исправления их в IE9.

MicrosoftMIX'10: день второй, Internet Explorer наносит ответный удар!

image

В Лас Вегасе начался второй день конференции MIX – крупнейшей конференции на тему web-разработки. Если вы пропустили темы и анонсы первого дня конференции, то смело наверстывайте в этом обширном посте. Если вы еще не в курсе, что это за конференция, то прошу ознакомится с другой статьей, в которой я пытался рассказать о ней более или менее подробно.

Кроме того, начали выкладывать первые записи сессий для скачивания. Спешите видеть! Видео самого кейнота, про который пойдет речь , доступно здесь

Итак. Что нам принес второй день MIX? Вернее, открытие второго дня. Поскольку у меня, когда я начал писать заметку, была половина 12 ночи, а в Лас Вегасе только начинался новый день.

Ответ один и он сокрушительный: Internet Explorer вернулся! Да, иногда они возвращаются. Казалось бы, еще утром я с сомнением оценивал шансы IE9, а сейчас вижу, что он не только догнал, но и перегнал своих конкурентов на их же поле. Но обо все по порядку.

Если вы хотите узнать про: GPU-акселерацию HTML5/SVG и типографики, поддержку и GPU-акселерацию HTML5 Video, полную поддержку селекторов CSS3, мультиядерную обработку Javascript и о том, как пали в битве скорости и поддержки стандартов Firefox и Chrome… обращайтесь под кат (а так же там есть другие, менее интересные вещи: jQuery и Джон Ресиг, кровь и Билл Бакстон, протокол oData и проект Gustav). Осторожно, много картинок!

Персональные блоги Classy Query — jQuery по-человечески.

Джон Резиг (John Resig), автор небезызвестной JS-библиотеки jQuery, наконец, решился составить истинную конкуренцию Prototype. Он дополнил jQuery, используя подход ООП.

Веб-разработкаПланируется интервью с создателем jQuery — John Resig.

Я планирую после Нового года взять интервью у John Resig.

Основные темы:
— что ждать от следующих версий jQuery;
— что ждать от следующих версий jQuery UI;
— твоё мнение о JavaScript 2 (и изменения в jQuery в связи с его появлением).

Пожалуйста, оставьте в комментариях, — какие вопросы хотите ему задать вы.
Возможно, он ответит и на них тоже.