Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования javascript 16.02.12.doc
Скачиваний:
7
Добавлен:
31.08.2019
Размер:
2.86 Mб
Скачать

Порядок выполнения операций

При вычислении выражений 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, как это принято делать.