- •Оглавление
- •Введение Информация о курсе
- •Тенденции веба
- •Переход в веб
- •Введение в html Что такое html?
- •Элементы
- •Атрибуты
- •Базовая структура документа
- •Стандарт xhtml 1.0 Strict
- •Введение в css
- •Правила, свойства, значения
- •Простые селекторы
- •Универсальный селектор
- •Селектор по типу элемента
- •Селектор по id
- •Селектор по class
- •Подключение таблицы стилей к веб-документу
- •Элемент style
- •Атрибут style
- •Работа с цветом
- •Свойство color
- •Миф о «безопасных» цветах
- •Свойство background
- •Background-color — цвет фона
- •Background-image — фоновое изображение
- •Background-repeat — режим повторения изображения
- •Background-attachment — режим прокрутки (прикрепления) изображения
- •Background-position — положение изображения
- •Свойства border-top, border-right, border-bottom, border-left
- •Свойства border-width, border-color, border-style — параметры рамки
- •Собирательное свойство border — рамка
- •Элементы html Области элементов
- •Некоторые текстовые элементы
- •Заголовки
- •Элемент p — абзац
- •Элемент address — адресные данные
- •Атрибут title
- •Оформление гиперссылок
- •Псевдоклассы гиперссылок
- •Элементы dt и dd — главная и подчиненная части списка определений
- •Оформление списков
- •Элемент img — изображение
- •Атрибут src — адрес изображения
- •Атрибут alt — альтернативное описание
- •Атрибут style — оформление изображения
- •Атрибуты colspan и rowspan — объединение ячеек
- •Семантическая верстка и микроформаты
- •Оформление страниц при помощи css Оформление текста
- •Свойство font-family — гарнитура шрифта
- •Семейства шрифтов
- •Свойство font-size — кегль шрифта
- •Свойство font-style — управление наклоном
- •Свойство font-weight — насыщенность шрифта
- •Свойство font — управление шрифтом
- •Свойство text-transform — преобразование регистра
- •Свойство line-height — высота строки
- •Свойство vertical-align — вертикальное выравнивание
- •Вертикальное выравнивание для строчных элементов
- •Вертикальное выравнивание для ячеек таблиц
- •Область элемента
- •Свойство text-indent — управление абзацным отступом
- •Свойство padding — внутренний отступ
- •Свойство margin – внешний отступ
- •Верстка Что такое верстка?
- •С кем взаимодействует верстальщик?
- •Как создается веб-страница?
- •Процесс верстки
- •Пример верстки
- •Глава 6. Введение в JavaScript
- •Что такое JavaScript?
- •Типы данных
- •Переменные
- •Операторы
- •Инструкции
- •Конструкторы
- •Прототипы
- •Возможности расширения
- •Экземпляры и классы
- •Общие методы класса Object
- •Интеграция html и JavaScript
- •Элемент script
- •Интеграция в данные
- •Глава 7. Клиентский JavaScript Формы в html
- •Элемент form — собственно форма
- •Обработчики событий
- •Обработчики событий как атрибуты
- •Обработка событий без внедрения кода через атрибуты
- •Таймеры
- •Объект Location
- •Объект History
- •Объект Window
Операторы
Кроме привычных операторов C++ в JS присутствует еще три, которым стоит уделить особое внимание.
Первый из них оператор идентичности “===” и неидентичности “!==”. Он отличается от оператора равенства большей строгостью сравнения.
Второй оператор — instanceof. Он позволяет проверять тип переменной. Это бывает необходимо для анализа аргументов функции. Пример его использования:
if (d instanceof Date) {alert ‘d is Date’;}
Третий оператор — void. Он возвращает значение undefined вместо значения оператора, перед которым он стоит. Это полезно, когда нужно выполнить некоторое действие (например, открыть новое окно) и при этом ничего не выводить в документ.
Инструкции
С инструкцией var мы уже познакомились, когда разбирались с описанием переменных. Но в JS существуют еще две интересных инструкции.
Первая из них — for/in. Это аналог foreach в C#, т.е. цикл перебора значений. Пример его использования:
var a = {x: 1, y: 2, z: 3};
for (x in a)
{
alert(x);
}
Вторая инструкция — with. Полный аналог with в Pascal. Она позволяет работать с некоторой цепочкой имен. Очень полезна во время работы с объектами, имеющими сложную структуру, поскольку значительно сокращается объем кода. Но из-за нее также снижается производительность. Это нужно учитывать при работе с большой нагрузкой.
ООП в JavaScript
Как было сказано ранее, JavaScript является объектным языком. Однако в синтаксисе JavaScript нет конструкции для описания класса, подобной той, которую используют в C++. Вместо этого используется возможность расширения объекта, благодаря которой к объекту можно добавлять различные свойства (поля и методы). Далее мы познакомимся с возможностями ООП в JavaScript более подробно.
Конструкторы
Для создания нового объекта в JavaScript используется оператор new. Сначала он создает пустой объект, а затем вызывает функцию, указанную после него, передавая ей созданный объект в виде ключевого слова new. Да, после слова new указывается не тип создаваемого объекта, а конструктор. В конструкторе происходит расширение объекта. Чтобы стало более понятно, рассмотрим пример описания конструктора:
function Rectangle(w, h)
{
this.width = w;
this.height = h;
}
var r1 = new Rectangle(1, 2);
var r1 = new Rectangle(11, 5);
В результате выполнения конструктора у каждого объекта будет свой набор свойств width и height. Это вполне нормально, поскольку значения этих свойств у разных объектов могут отличаться.
Конструктор обычно не возвращает значение, но допускается возможность возвращать объект, который становится результатом выражения с new. При этом переданный конструктору объект уничтожается.
Прототипы
Мы уже попробовали добавлять поля к объектам. Но часто требуется добавлять методы. Предположим, что нам необходимо добавить метод, рассчитывающий площадь прямоугольника. Естественно попытаться сделать это с помощью следующего кода:
function Rectangle(w, h)
{
this.width = w;
this.height = h;
this.area = function() { return this.width * this.height; }
}
Вроде бы все отлично работает. Но давайте разберемся с предложенным кодом. В нем метод area добавляется отдельно для каждого экземпляра. Это не самый лучший вариант, поскольку метод одинаков для всех экземпляров класса и не стоит копировать его несколько раз.
Специально для решения данной проблемы в JavaScript введено понятие прототипа. Чтобы не утомлять вас запутанными определениями, достаточно сказать, что прототип предназначен для хранения общей функциональности всех экземпляров какого-то класса.
Идея проста: прототип содержит общую функциональность, а каждый объект, которому требуется эта функциональность, ссылается на него. В результате получаем решение проблемы: все общее хранится в одном месте и доступно для использования всеми желающими объектам. Так построен механизм наследования в JS.
Для использования прототипов в каждом объекте существует свойство prototype, которое хранит ссылку на прототип. Чтобы понять, как оно используется, достаточно взглянуть на код приведенный ниже.
function Rectangle(w, h)
{
this.width = w;
this.height = h;
}
Rectangle.prototype.area = function() { return this.width * this.height; }
Но при использовании такого расширения бывает необходимо определить, принадлежит ли какое-либо свойство данному объекту или оно унаследовано из прототипа. Специально для этого существует метод hasOwnProperty(), которому нужно передать имя соответствующего свойства. Если свойство принадлежит объекту, метод вернет true, в противном случае — false.