Добро пожаловать, Гость! Регистрация RSS
Воскресенье, 05.05.2024

Javascript - тонкости и секреты

Прелесть и соль Javascript заключаются всего в нескольких пунктах :
  • Полная интеграция с браузером
  • Простые вещи делаются просто
  • Поддерживается почти везде

Этот компот преимуществ нельзя найти ни в одной из других технологий.
Например, такие технологии как ActiveX, VBScript, XUL - поддерживаются не в каждом браузере (не кросс-браузерны). Такие технологии как Flash, Silverlight, Java - не полностью интегрированы с браузером, работают в своем окружении.
Поэтому Javascript - уникальная технология, и таковой останется. Сейчас она развивается, создается язык Javascript 2 и новый интерпретатор. 

Возможности javascript в некоторых областях, к сожалению, ограничены.
Поэтому используются альтернативные технологии.

Java тяжелая, тормозная, но может все. Она используется там, где требуется почти-десктоп приложение. 
Java - один из наиболее распространенных в мире языков. На нем существует громадное количество библиотек, с помощью которых можно описывать сложные интерфейсы и алгоритмы. В вебе это нужно редко.

Flash изначально появился как кроссбраузерная платформа и язык для мультимедии, для оживления веба красочной анимацией, аудио и видео. Но не только это вкусно в технологии Flash.
Мощные средства для создания сетевых соединений(сокеты)
Объекты для работы с мультимедиа: изображениями, аудио, видео
Внутреннее хранилище объектов, которые не посылаются на сервер при каждом запросе, как куки.
Удобные графические средства разработки для Flash

Ну и для баланса - недостатки, по сравнению с javascript.
Отдельный контейнер. Например, нельзя выделить участок текста, частично находящегося в контейнере Flash.
Плохо индексируется поисковиками. Поисковики ходят по HTML-ссылкам, но(пока?) не кликают по ссылкам внутри Flash-приложения.
Из Flash можно легко вызвать javascript. Наоборот - сложнее, но тоже возможно, поэтому целесообразно знать обе технологии и применять их вместе.
JavaFX, Silverlight, XUL
Эти технологии призваны дополнять javascript в области коммуникации и построения интерфейсов.

Пока они все далеки по распространенности от javascript и flash. 
  • JavaFX - "легкая" надстройка над Java, будет работать только с Java на компьютере клиента.
  • XUL - язык описания интерфейсов, удобен если писать планируете только под Mozilla.
  • Silverlight - конкурент Flash от Microsoft на основе .NET. Из всех технологий - он сделан позже всех, но лучше ли?

JavaScript — очень интересный и увлекательный язык программирования. Знание некоторых особенностей этого языка сильно облегчит Вам процесс работы с ним. Не будем терять время, как говорится «write less do more», поехали.
Для теста я все вложил в один HTML файл. И не забудьте о FireBug.1. Объявление фукнции
Как видите несмотря на то что вызов функции isNimble() следует до ее объявления, пример не выдает ошибку. Весь контекст просматривается JavaScript-ом полностью, только потом начинает исполняться.
var canFly = function(){ return true; }; 
window.isDeadly = function(){ return true; };
assert( isNimble() && canFly() && isDeadly(), "Все работает")
function isNimble(){ return true; }
2. Код после «return»
Не смотря на то что функция инициализирована после оператора return, при попытке запустить этот код, мы не получим ошибку, так как все еще действует правило описанное выше.
function stealthCheck(){ 
var ret = stealth() == stealth();
return assert( ret, "Код после оператора return не исполнится, но ошибки не будет!" );
function stealth(){ return true; }
}
stealthCheck();
2.1. Оператор «typeof»
Все эти приемы не проходят, когда речь заходит о typeof. Если на момент вызова этого оператора функция не объявлена мы получим значение «undefined». Однако функция isDeadly объявлена в глобальном контексте (в данном случаем с помощью конструкции window.isDeadly), поэтому typeof isDeadly вернет нам значение «function».
assert( typeof canFly == "undefined", "canFly не объявлена" ); 
assert( typeof isDeadly == "undefined", "Но isDeadly виден" );
var canFly = function(){ return true; };
window.isDeadly = function(){ return true; };
3. Анонимные функции
Анонимные функции могут иметь имена, но они будут видно только в той функции, к которой они относятся. Это удобно при рекурсивных вызовах. Вне функции ninja, анонимная функция myNinja уже не видна.
var ninja = function myNinja(){ 
assert( ninja == myNinja, "Эта функция с двумя именами" );
};
ninja();
assert( typeof myNinja == "undefined", "myNinja не существует, так как она анонимная");
Функция может вызвать саму себя с помощью следующей конструкции: arguments.callee(). Эта конструкция доступна внутри любой функции.
var ninja = { 
yell: function(n){
return n > 0 ? arguments.callee(n-1) + "a" : "hiy";
}
};
assert( ninja.yell(4) == "hiyaaaa", "arguments.callee это и есть сама функция" );
В этот примере, функция рекурсивно вызывает сама себя 4 раза, а результатом будет строка «hiyaaaa». Она вызвает саму себя и передает ей значение переменной n-1 и так далее.
Это лишь парочка примеров. Их всех можно найти в книге Джона Резига под названием Secrets of the JavaScript Ninja. Сама книга очень интересная и полна всяких тонкостей и синтаксических конструкий. Напоследок приведу синтаксическую конструкцию из книги, которая увеличивает скорость обращения к DOM в 7 раз.
function getElements( name ) {
return getElements.cache[ name ] = getElements.cache[ name ] ||
document.getElementsByTagName( name );
}
getElements.cache = {};
Вызывается функция, передаем ей тег, который нас интересует, если он есть в getElements.cache, то функция возвращает нам его оттуда, если нету — обращается к DOM дереву и одновременно заносит его в кэш. При первом вызове время составило 0.019 мс, а при втором уже 0.002 мс.
Для начало все. Удачи Вам в разборе примеров.


FreeAvalanche.ru - Лавина Бесплатного Трафика на Ваш сайт!

Как Быстро Раскрутить Сайт?
Система Быстрого Нагона Трафика!

Регистрируйтесь в Новой системе Продвижения, которая порождает ГАРАНТИРОВАННЫЕ
Посещения Вашего сайта.

Смотрите ниже

Нажмите и Пользуйтесь
Системой Бесплатно

Яндекс.Метрика