
- •Яковлев б.С., доцент, канд. Техн. Наук конспект лекций
- •Специальные языки программирования
- •090900 «Информационная безопасность»
- •18.1. Общие сведения 151
- •20.1. Общие сведения 180
- •24.1. Общие сведения 237
- •25.1. Общие сведения 253
- •27.1. Понятие регулярного выражения 278
- •29.1. Общая информация 305
- •1. Основы языка JavaScript
- •1.1. Основные особенности JavaScript
- •2. Операторы языка
- •2.1. Операторы сравнения
- •2.2. Комментарии в языке JavaScript
- •2.3. Пример проверки операции сравнения
- •3. Формы на веб страницах и их обработка
- •3.1. Обработка интернет формы
- •3.2. Применение регулярных выражений при проверке интернет форм
- •4. Функции
- •4.1. Запуск функции при обработке данных на web-странице
- •4.2. Передача данных функции
- •4.3. Вложенные функции. Ихч свойства и применение
- •5. Объекты: строк, чисел и массивов
- •5.1. Строки
- •5.2. Числа
- •5.3. Массивы
- •5.4. Операции, выполняемые над массивами
- •5.5. Ассоциативные массивы
- •6. Объектная модель документа
- •6.1. Технология xml
- •Изображение: Блок-схема документа
- •Создание эффекта изменения изображения
- •6.2. Добавление и удаление элементов при помощи dom технологии
- •6.3. Понятие об элементах и потомках
- •6.4. Обработка текста средствами dom
- •7. Объект документа (document ) и объект окна ( window )
- •7.1. Объект документа (document )
- •7.2. Объект Window
- •7.3. Функции setTimeout и setInterval
- •7.4. Объект Document (window.Document)
- •8. Основы JavaScript
- •8.1. New Object и объектные литералы
- •8.2. Прототипирование
- •8.3. Переменные Private, Public и Static
- •9. Методы наследования, свойства замыкания
- •9.1. Наследование
- •9.2. Замыкание
- •10. Ajax технология
- •10.1. Общие сведения
- •10.2. Создание объекта xmlHttp
- •10.3. Xml, json и текстовые данные
- •10.4. Пример со списком контактов
- •11. Обработка ошибок при отработке сценариев
- •11.1. Синтаксические ошибки
- •11.2. Ошибки времени выполнения
- •11.3. Объект window.Onerror
- •11.4. Обработка ошибок Try/Catch/Finally и Throw
- •11.5. Обработка ошибок в ajax
- •12. Понятие о рекурсии
- •12.1. Основные понятия
- •12.2. Стек
- •Создание собственного стека
- •Применение рекурсии
- •13. Технология ajax
- •13.1. Общие сведения ajax
- •Ajax является технологией браузера
- •Ajax основан на открытых стандартах
- •Технология ajax улучшает приложения Интернет
- •Ajax можно использовать прямо сейчас
- •Ajax использует xml и запросы http
- •Функция showHint()
- •Функция stateChanged()
- •13.2. Браузеры ajax
- •Поддержка ajax браузерами
- •Исходный код приложения ajax
- •Страница html для примера ajax
- •Код JavaScript приложения ajax
- •Серверные страницы ajax для asp и php
- •Серверная страница ajax - asp и php
- •Пример ajax на asp
- •Пример ajax на php
- •Пример php
- •13.3. Пример ajax c базой данных
- •Описание примера:
- •Разбор примера ajax с базой данных
- •Код JavaScript приложения ajax
- •Серверная страница приложения ajax
- •Код JavaScript приложения ajax
- •Серверная страница приложения ajax
- •13.4. Объект ajax xmlHttpRequest
- •Объект xmlHttpRequest
- •Создание объекта xmlHttpRequest
- •Разбор приведенного примера
- •Еще пример?
- •Разбор приведенного примера
- •Методы объекта xmlHttpRequest
- •Свойство readyState объекта xmlHttpRequest
- •Атрибут id заменяет атрибут name
- •Важное замечание о совместимости
- •Атрибут lang
- •Обязательные элементы xhtml
- •Пример xhtml
- •Определения трех типов документов
- •Как использовать xhtml Преобразование сайта на xhtml
- •Добавить определение doctype
- •Замечание о doctype
- •Имена тегов и атрибутов записать в нижнем регистре
- •Все атрибуты заключают в кавычки
- •Проверка (валидация) Web-сайта
- •14.5. Проверка xhtml
- •Проверка xhtml в соответствии с dtd
- •Модуляризация xhtml
- •Зачем нужна модуляризация xhtml?
- •Модули xhtml
- •14.6. Стандартные атрибуты xhtml
- •Базовые атрибуты
- •События клавиатуры
- •События мыши
- •Мы закончили изучение xhtml, что дальше? Заключительные замечания по xhtml
- •Что делать дальше?
- •15. История php
- •15.1. Общая информация о php
- •15.2. Возможности php
- •15.3. Установка и настройка по
- •15.4. Установка php 4.X.X под Windows
- •Заключение
- •16. Основной синтаксис языка php
- •16.1. Основной синтаксис
- •Разделение инструкций
- •16.2. Переменные, константы и операторы
- •Переменные
- •16.3. Константы
- •16.4. Операторы
- •16.5. Типы данных
- •Тип boolean (булев или логический тип)
- •Тип integer (целые)
- •Тип float (числа с плавающей точкой)
- •16.6. Тип array (массив)
- •Определение при помощи array()
- •Определение с помощью синтаксиса квадратных скобок
- •16.7. Тип object (объекты)
- •Тип resource (ресурсы)
- •Решение задачи
- •Заключение
- •17. Условные операторы
- •17.1. Оператор if
- •17.2. Оператор else
- •17.3. Оператор elseif
- •17.4. Альтернативный синтаксис
- •17.5. Оператор switch
- •17.6. Циклы
- •17.7. Операторы передачи управления
- •17.8. Операторы включения
- •18. Основы клиент-серверных технологий
- •18.1. Общие сведения
- •18.2. Протокол http и способы передачи данных на сервер
- •Форма запроса клиента
- •18.3. Использование html-форм для передачи данных на сервер
- •Для метода get
- •Для метода post
- •18.4. Обработка запросов с помощью php
- •Пример обработки запроса с помощью php
- •Заключение
- •19. Функции в php
- •19.1. Общие понятия
- •19.2. Функции, определяемые пользователем
- •19.3. Аргументы функций
- •19.4. Списки аргументов переменной длины
- •19.5. Использование переменных внутри функции Глобальные переменные
- •Статические переменные
- •19.6. Возвращаемые значения
- •Возвращение ссылки
- •19.7. Переменные функции
- •20. Объектная модель
- •20.1. Общие сведения
- •Классы и объекты
- •20.2. Инициализация переменных
- •Объекты
- •20.3. Наследование
- •20.4. Различие между конструкторами php4 и php3
- •20.5. Оператор ::
- •Оператор parent
- •20.6. Объектная модель php5
- •21. Массивы в php
- •21.1. Общие требования
- •Массивы
- •Операции с массивами
- •Функция count
- •21.2. Функция in_array
- •Функция array_search
- •Функция array_keys
- •Функция array_unique
- •21.3. Сортировка массивов
- •Функция sort
- •Функции asort, rsort, arsort
- •21.4. Сортировка массива по ключам
- •21.5. Применение функции ко всем элементам массива
- •21.6. Выделение подмассива Функция array_slice
- •Функция array_chunk
- •Сумма элементов массива
- •Заключение
- •22. Строковые переменные
- •22.1. Общая информация
- •Поиск элемента в строке
- •22.2. Выделение подстроки Функция strstr
- •Функция substr
- •22.3. Замена вхождения подстроки Функция str_replace
- •Функция substr_replace
- •22.4. Разделение и соединение строки
- •22.5. Строки, содержащие html-код
- •Заключение
- •23. Работа с файлами
- •23.1. Создание файла Функция fopen
- •23.2. Закрытие соединения с файлом
- •Запись данных в файл Функция fwrite
- •23.3. Чтение данных из файла
- •Функция fread
- •Функция fgets
- •Функция fgetss
- •Функция readfile
- •Функция file
- •Функция file_get_contents
- •23.4. Проверка существования файла
- •Функция file_exists
- •Функция is_writable
- •Функция is_readable
- •23.5. Удаление файла
- •Загрузка файла на сервер
- •Заключение
- •24. База данных
- •24.1. Общие сведения
- •Базы данных: основные понятия
- •Индексирование
- •24.2. Субд MySql
- •24.3. Язык sql
- •Немного истории
- •Основные операторы языка sql
- •Оператор create table
- •24.4. Оператор drop table
- •Оператор alter table
- •24.5. Оператор select
- •Оператор insert
- •24.6. Оператор update
- •Оператор delete
- •Заключение
- •25. Функции для работы с базой данных MySql
- •25.1. Общие сведения
- •Построение интерфейса для добавления информации
- •Установка соединения
- •25.2. Выбор базы данных
- •Получение списка полей таблицы
- •25.3. Отображение списка полей в html-форму
- •Запись данных в базу данных
- •25.4. Отображение данных, хранящихся в MySql
- •Заключение
- •26. Сессии и их специфика в php
- •26.1. Авторизация доступа
- •26.2. Механизм сессий
- •Настройка сессий
- •26.3. Работа с сессиями Создание сессии
- •Регистрация переменных сессии
- •26.4. Удаление переменных сессии
- •26.5. Безопасность
- •Заключение
- •27. Понятие регулярного выражения
- •27.1. Понятие регулярного выражения
- •Регулярные выражения в php
- •27.2. Синтаксис регулярных выражений
- •27.3. Подвыражения (подшаблоны)
- •Повторения (квантификаторы)
- •Модификаторы pcre
- •27.4. Регулярные выражения углубленно
- •Обратная ссылка
- •Утверждения
- •Условные подвыражения
- •Заключение
- •28. Взаимодействие php с xml
- •28.1. Введение
- •Основные понятия
- •28.2. Структура xml-документа
- •28.3. Взаимодействие php и xml Расширения sax и dom xml
- •Установка расширения dom xml
- •28.4. Взаимодействие php и xml посредством dom xml
- •Перевод данных xml-файла в объекты и классы php
- •28.5. Обход дерева объектов
- •Добавление новых элементов в xml-документ
- •Заключение
- •29. Шаблон в языке программирования
- •29.1. Общая информация
- •Шаблоны подстановки
- •29.2. Шаблоны FastTemplate
- •Методы FastTemplate
- •Метод define
- •Метод assign
- •29.3. Метод parse
- •Метод FastPrint
- •Решение задачи с помощью шаблонов FastTemplate
- •29.4. Шаблоны Smarty
- •Установка
- •29.5. Основной синтаксис
- •Конфигурационные файлы
- •29.6. Методы
- •Метод assign
- •Метод append
- •Функция capture
- •Функция section
- •Функция foreach
- •Оператор if, elseif, else
- •29.8. Решение задачи с помощью шаблонов Smarty
- •Заключение
- •Библиографический список
8. Основы JavaScript
Почти каждый современный язык программирования имеет некоторый метод записи объектно-ориентированного (ОО) кода. Если вы знакомы с такими языками, как C++, Java, VB, php или подобными, то должны быть знакомы и со структурой Class этих языков.
Классы в этих языках позволяют быстро создавать объекты с одинаковыми свойствами и методами, не требуя при этом заново определять все эти свойства и методы. В терминах структур мы имеем классы, а внутри этих классов - функции и переменные, а внутри каждой из этих функций - дополнительные переменные. Каждая функция в классе идеально работает с переменными и другими функциями, внутренними для этого класса.
Структура Class и объекты в целом хорошо работают потому, что они действуют как реальные объекты. Например, мы можем иметь класс Телевизор. Так как все телевизоры в целом работают одинаково, то нет необходимости переопределять множество атрибутов телевизора, чтобы сделать еще один новый. Этот класс будет определять методы и свойства телевизора. Мы будем иметь такие свойства, как марка, размер экрана, и т.д., и методы, такие, как включить/выключить, сменить канал, и т.д.
JavaScript слегка отличается от стандартной объектно-ориентированной структуры Class. Вместо использования классов для создания объектов, каждая функция в JavaScript может эффективно действовать как класс. Мы используем концепцию вложенных функций, называемую прототипированием (Prototyping ), для выполнения таких же вещей, как и языки со структурами Class. Если вы знакомы с ОО-языком на основе классов, то прототипирование может показаться сначала непривычной концепцией, но она предлагает большие возможности и часто является значительно более гибкой с точки зрения программирования, чем другие методы.
8.1. New Object и объектные литералы
Для начала необходимо объяснить, как объекты действуют в JavaScript. Объекты позволяют определить переменную и задать затем для этой переменной любое число свойств. Чтобы понять это, давайте посмотрим на простой пример:
var myObj = new Object;
myObj.a = 5;
myObj['b'] = 10;
myObj.c = 20;
myObj.getTotal = function(){
alert(this.a+this.b+this.c);
};
// или
var myObj = {a:5, b:10, c:20,
getTotal:function() { alert(this.a+this.b+this.c); }};
Оба эти фрагмента кода создают одну и ту же переменную myObj. Первый пример использует синтаксис new Object(), а затем определяет все свойства одно за другим. Второй фрагмент кода является сокращенной нотацией, которая делает в точности то же самое. Мы имеем теперь переменную myObj. myObj содержит три переменные для целых чисел: a, b и c. Для доступа к любой из них мы просто используем myObj.a или myObj['a']. Можно видеть, что myObj имеет также в качестве свойства функцию getTotal. Мы обращаемся к getTotal таким же образом, как и к свойствам a, b и c: myObj.getTotal(). Функция getTotal() обращается к переменным в переменной myObj с помощью this. При выполнении кода внутри функции в объекте this ссылается на объект. В данном случае this ссылается на сам объект myObj.
Как можно видеть, объекты в JavaScript являются чрезвычайно полезными. К сожалению, часто приходится объявлять слишком много информации каждый раз, когда мы хотим создать объект. Например, давайте создадим объект Animal:
var myAnimal = {
name: 'felix',
species: 'cat',
talk: function(){ alert('Meow!'); },
callOver: function(){ alert(this.name+' ignores you'); },
pet: function(){ alert('Purr!'); }
}
Мы имеем переменную myAnimal, которая представляет кота ( cat ) с именем Феликс ( felix ). Однако, если потребуется создать другого кота, нам понадобиться ввести все это снова. Здесь на помощь приходит объектно-ориентированный подход. Вместо перепечатки всякий раз всего объекта можно определить функцию, которая создает для нас аналогичный объект:
function Cat(name){
this.name = name;
this.species = 'Cat';
this.talk = function(){ alert('Meow!'); }
this.callOver = function(){ alert(this.name+' ignores you'); },
this.pet = function(){ alert('Purr!'); }
}
var felix = new Cat('Felix');
var sam = new Cat('Sam');
var patty = new Cat('Patty');
felix.pet(); // выводит 'Purr!'
sam.callOver(); // выводит 'Sam ignores you'. Просто, как кот!
alert(patty.species); // выводит 'Cat'
В этом примере создана одна функция Cat, а затем создаются три новых кота с помощью этой функции: Felix, Sam и Patty. Каждый из этих котов имеет одинаковые функции: talk, callOver иpet, и каждая из них имеет свойство species, заданное как 'cat'. И подобно всем котам, они в равной степени своенравны.
Обычно говорят, что felix, sam и patty являются экземплярами одного объекта: Cat. Код самой функции Cat называется конструктором. Мы передаем ей переменную name и используем ее для задания this.name. К сожалению, при объявлении каждой функции Cat в конструкторе в действительности создается новая копия каждой функции всякий раз при создании нового Cat. Так как функции talk, callOver и pet являются идентичными, то нам в действительности требуется только одна копия каждой функции. Здесь на помощь приходит прототипирование.