- •Лекции по JavaScript Что такое javascript?
- •Среда разработки программ JavaScript
- •Что умеет javascript?
- •Переменные
- •Типы переменных
- •Массивы Создание
- •Аргументы
- •Описание, примеры
- •Методы объекта Array
- •Многомерные массивы
- •Объект Boolean
- •Объект Number
- •Объект Math
- •Объект String
- •Основы работы со строками
- •Использование кавычек
- •Встроенные функции
- •Строки и числа
- •Преобразование «Число → строка»
- •Преобразование «Строка → число»
- •Объект Date
- •Объект Global
- •Операторы и операции Операторы Javascript
- •Оператор break
- •Оператор comment
- •Оператор continue
- •Перебор свойств, кроме унаследованных
- •Оператор function
- •Оператор if...Else
- •Оператор return
- •Оператор var
- •Оператор while
- •Оператор with
- •Логические операторы
- •Операции сравнения
- •Арифметические операции
- •Битовые операции
- •Логические операции
- •Строковые операции
- •Операции присваивания
- •Прочие операции Условная операция
- •Операция запятая
- •Операция delete
- •Операция in
- •0 In langs // возвращает true
- •4 In langs // возвращает false Операция instanceof
- •Операция new
- •Операция this
- •Операция typeof
- •Операция void
- •Порядок выполнения операций
- •Функции
- •Функции - объекты
- •Области видимости
- •Параметры функции
- •Работа с неопределенным числом параметров
- •Пример передачи функции по ссылке
- •Пример использования:
- •Сворачивание параметров в объект
- •Объекты, свойства и методы Основные понятия
- •Объект JavaScript
- •Создание объектов с помощью инициализатора
- •Создание объектов с помощью конструктора
- •Создание методов
- •Изменение прототипа объекта
- •Удаление объектов
- •Вывод информации в строку состояния
- •Объект location
- •Проигрывание wav-файлов
- •Плавное изменение цвета фона документа html
- •Объект window.
- •Динамическое изменение страницы
- •Прокручивание документа
- •Параметры
- •Закрывающий тег
- •Аргументы
- •Значение по умолчанию
- •Параметр alt Описание
- •Значение по умолчанию
- •Параметр value Описание
- •Синтаксис
- •Параметры
- •Закрывающий тег
- •События
- •Когда использовать
- •Через свойство объекта
- •Основные события javascript
- •If (условие)
- •Способы открытия нового окна с помощью js
- •Модальное окно
- •X: 1, // добавляем свойство
- •Установка веб-сервера Apache и средств программирования под Windows
- •Что такое хостинг и где взять место под страницу.
- •Объектная Модель. Детали.
- •Языки на базе классов и языки на базе прототипов
- •Определение класса
- •Подклассы и наследование
- •Добавление и удаление свойств
- •Отличия. Резюме.
- •Пример Employee
- •Создание иерархии
- •Свойства объекта
- •Наследование свойств
- •Добавление свойств
- •Более гибкие конструкторы
- •И снова о наследовании свойств
- •Локальные и наследуемые значения
- •Определение взаимоотношений экземпляров
- •Глобальная информация в конструкторах
- •Нет множественного наследования
Порядок выполнения операций
При вычислении выражений JavaScript учитывает приоритет операций: операции, имеющие больший приоритет, выполняются первыми. Если операции имеют равный приоритет, то они выполняются слева направо. Для изменения порядка выполнения операций следует пользоваться круглыми скобками: выражение, заключенное в них, имеет наивысший приоритет. В следующей таблице приведен список всех операций языка JavaScript в порядке убывания их приоритетов; операции, расположенные в одной строке таблицы, имеют равный приоритет.
Приоритеты операций |
Операция |
. [] () |
++ -- - ~ ! delete new typeof void |
* / % |
+ - |
<< >> >>> |
< <= > >= instanceof |
== != === !== |
& |
^ |
| |
&& |
|| |
?: |
= += -= *= /= %= <<= >>= >>>= &= ^= |= |
, |
Функции
Существует 3 способа создать функцию. Основное отличие в результате их работы - в том, что именованная функция видна везде, а анонимная - только после объявления:
Именованные(FunctionDeclaration) |
Анонимные (FunctionExpression) |
function имя_функции(параметры) { ... } |
var имя_функции = function(параметры) {…}
или
var имя_функции = new Function(параметры, '...') |
Именованные функции доступны везде в области видимости |
Анонимные - доступны только с момента объявления. Синтаксис new Function используется редко, в основном для получения функции из текста, например, динамически загруженного с сервера в процессе выполнения скриптов. |
/*функция sum определена ниже*/ var a = sum(2,2) function sum(x,y) { return x+y }
|
/*будет ошибка, т.к sum еще не существует*/ var a = sum(2,2) var sum = function(x,y) { return x+y }
|
Функции - объекты
В языке программирования С++ класс это структура данных, где помимо обычных полей определены функции-методы для работы с этими данными. В языке JavaScript для создания собственных классов используется прямо противоположный метод.
Класс JavaScript создается как функция, в которой определены свойства, играющие роль членов класса. Что же касается методов, то они тоже определяются как функции, но отдельно. Приведем конкретный пример.
Пусть нам нужно создать класс, предназначенный для нахождения суммы двух чисел. Имя класса: sum. Пусть пока в нем будет только один конструктор и не будет методов, мы добавим их позже. В Java это выглядело бы так:
class sum {
double x,y; //объявление полей
sum(double x, double y){ //конструктор
//инициализация полей класса
this.x=x;
this.y=y;
}
}
Такой класс только инициализирует поля класса, но ничего не делает.
Сейчас невозможно узнать логику разработчиков стандарта языка JavaScript. Возможно, что они рассуждали так: зачем подчеркивать то, что создается класс с именем sum, если в нем есть конструктор, который имеет тоже имя. Не проще ли записать так:
{
double x,y;
sum(double x, double y){
this.x=x;
this.y=y;
}
}
Но можно пойти далее – отказаться от объявления полей класса (x и y), подразумевая, что переменные с именами помеченные словом this и есть поля класса, а те у которых нет этого указателя – являются параметрами конструктора. Тогда описание класса становится совсем простым:
sum(double x, double y){
this.x=x;
this.y=y;
}
Но теперь получилось, что класс совпадает с описанием конструктора, т.е. его синтаксис такой же, как синтаксис функции. Если записать эту функцию по правилам JavaScript, т.е. не указывать тип переменных, то она будет иметь такой вид
function sum(x,y){
this.x=x;
this.y=y;
}
Как и ранее эта функция ничего не делает. Добавим в нее пару строк, позволяющих найти сумму чисел x и y и вывести ее на экран.
function sum(x,y){
this.x=x;
this.y=y;
z=this.x+this.y; //z-не является полем класса
document.write("x+y="+ z+"<BR>");
}
Названый класс создается следующим образом:
<html>
<head>
<title><h3>Демонстрация класса</h3></title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script language="javascript">
function sum(x,y){
this.x=x;
this.y=y;
this.z=this.x+this.y;
document.write("x+y="+this.z+"<BR>");
}
</script>
</head>
<body>
<script>
var x=3,y=4;
var a=5, b=6;
sum(1,2);//обычный вызов функции
object1=new sum(x,y);
object2=new sum(a,b);
object3=new sum(7,8);
object4=new sum(x,y);
</script>
</body>
</html>
Нетрудно заметить, что описание нашего класса есть ни что иное, как функция конструктора. Параметры конструктора предназначены для установки свойств объекта при его создании на базе класса. Свойства определяются простыми ссылками на их имена с указанием ключевого слова this. Это ключевое слово здесь указывает, что в операторе выполняется ссылка на свойства того объекта, для которого вызван конструктор, то есть для создаваемого объекта.
Определение нового класса sum и его методов мы расположили в области заголовка документа HTML, как это принято делать.