
- •История создания и и спользования javascript
- •3. Базовые возможности языка JavaScript. Типы данных.
- •4. Базовые возможности языка JavaScript. Функции и объекты.
- •5. Базовые возможности языка js. Блоки.
- •6. Примитивные типы даны в js
- •8. Преобразование типов. Слабый контроль типов.
- •9. Принципы построения операторов. Арифметические операции.
- •24.Объект Math
- •25. Объекты связанные с типами данных
- •26. Регулярное выражение. Основные понятия.
- •33. Обход дерева dom
- •34. События в js
- •35. Базовая модель событий.
- •36. События мыши, клавиатуры, браузера
- •37. События интерфейса пользователя, мутации. Создание событий.
- •38. Объект Window. Создание диалоговых окон. Открытие и закрытие окон.
- •39. Управление окнами
- •40.События объекта window
- •41. Фреймы.
- •42. Расширения window
- •43. Объект Document. Свойства объекта Document
- •44. Методы объекта Document
- •45. Доступ к элементам html – документа
- •46. Формы
- •47. Поля формы
8. Преобразование типов. Слабый контроль типов.
Автоматическое преобразование типов является одной из самых мощных возможностей JavaScript, но и самой потенциально опасной для небрежного программиста. Преобразование типов - это конвертирование данных одного типа в данные другого типа. В JavaScript это происходит автоматически, когда вы изменяете тип данных, хранимых в переменной:
var х = "3.14"; х = 3.14;
Результаты преобразования к значению типа Boolean
Тип |
Конвертируется в булево значение |
Неопределенный (Undefined) |
False |
Пустой (Null) |
False |
Числовой (Number) |
False, если это 0 или NaN, иначе true |
Строковый (String) |
False, если это длина строки равна 0, иначе true |
Другие объекты |
True |
Результаты преобразования к значению типа Number
Тип |
Конвертируется в числовое значение |
Неопределенный (Undefined) |
NaN |
Пустой (Null) |
0 |
Логический (Boolean) |
1,если это true, 0, если это false |
Строковый (String) |
Соответствующее числовое значение, если строка похожа на число, иначе NaN |
Другие объекты |
NaN |
Результаты преобразования к значению типа String
Тип |
Конвертируется в строку |
Неопределенный (Undefined) |
"undefined" |
Пустой (Null) |
"null" |
Логический (Boolean) |
"true", если это true, " f а 1 se ", если это false |
Числовой (Number) |
"NaN", " 0 " или строка, представляющая соответствующее числовое значение |
Другие объекты |
Значение, возвращаемое объектом с помощью метода toStr ing (), если таковой имеется, иначе "undefined |
Js язык программирования, в котором осуществляется динамический контроль типов или слабый контроль типов. Тип данных переменной зависит от содержимого переменной. Если переменной присвоить строковое значение, то она будет считаться переменной строкового типа. Следствием автоматического определения типа данных является то, что тип переменной может меняться в процессе выполнения сценариев. Например, переменная может хранить строковое значение, а позже ей можно будет присвоить логическое. Тип переменной измениться в сответсвии с хранимым ею типом данных.
9. Принципы построения операторов. Арифметические операции.
Операторы являются инструкциями интерпретатору по выполнению конкретных действий. Оператор присваивания = - в результате присваивания значение переменной стоящее справа от помещается в переменную стоящую слева. x= y+12;
; - указание конца оператора.
{} – группировка набора последовательно идущих операторов, создание одного большого оператора или блока программного кода.
Арифметические операции: +, -,*,/,%, ++ (инкремент), --(декремент)
var x=3, y=6;
x=-x;
x=y+2;
x=y-1;
Когда знак операции инкремента(декремента) размещается слева от операнда, запись называется префиксной записью, а когда этот знак размещается справа – постфиксной записью. Постфиксная и префиксная запись отличаются порядком выполнения действий. 1. Увеличение операнда на 1. 2. Использовать значение операнда (х) как значение выражения (х++или ++х)
Префиксная запись выполняет сначала шаг 1, а потом шаг 2, а постфиксная - наоборот.
var x=10, y=10;
alert(“x++ = “+(x++)+”; ++y = “+(++y)) //10 11
alert(“x = “+x+”; y = “+y); //11 11
Использовать префиксное и постфиксное приращение одновременно нельзя, это может привести к ошибке. Следует избегать префиксное и постфиксное приращение к переменной боле одного раза в одном и том же выражении.
Конкатенация строк. Оператор +
12. Ветвление в JS. Операторы if u switch.
Для создания конструкций ветвления (условных переходов) JavaScript поддерживает условные операторы типа if и switch-case, которые дают возможность выборочного выполнения кусков программного кода.
Общий вид записи оператора if:
if (выражение) оператор;
Указанное выражение приводится к логическому значению, и если оно принимает значение true, то выполняется оператор. Иначе оператор if пропускается.
Вариантом оператора if является оператор if-else, позволяющий выполнить один оператор, если усовие истинно, и другой оператор, если условие ложно:
if (выражение)
оператор1
else
оператор2
При необходимости операторы if-else можно помещать друг в друга, для организации множественного ветвления:
if (выражение1)
оператор1 else if (выражение2)
оператор2 else if (выражениеЗ)
оператор3 else
оператор4
Пример:
if(x > 10){
x = 0;
}
else {
x = x + 1;
}
Сначала оценивается условие оператора if и, если сравнение дает true (т.е. х действительно больше 10), то х устанавливается равным нулю. Иначе для х выполняется приращение.
В случае множественного ветвления, когда требуется выполнить различные участки кода в зависимости от значения некоторого выражения, полезным может быть оператор switch.
Общий вид записи этого оператора:
switch (выражение) {
case значение_1: оператор(ы)
case значение_2: оператор(ы)
…
case значение_N: оператор(ы)
default: оператор(ы)
}
В зависимости от значения переменной выражение во время выполнения программы будет исполнен тот код, в начале которого стоит метка case со значением этой переменной. Если такой метки не найдется, то будет выполнен код с меткой default, а при его отсутствии оператор switch будет пропущен.
Если выполнение программы перешло к одной из строк case, то выполнение оператора не прекращается по достижению следующей строки case. Например, в коде
var a = 5, s = "";
switch(a){
case 6: s +=a;
case 5: s +=a;
case 4: s +=a;
case 3: s+=a;
default: s+=" s= "+a;
}
alert(s);
выполняются все подчеркнутые выше строки:
Поэтому после case: может идти более одного оператора, в отличие от if.
Для того, чтобы завершить оператор switch, используется оператор break;. Используя этот оператор, можно все операторы, идущие после меток case внутри switch, сделать взаимоискоючающими, ставя break перед каждой следующей строкой с меткой case:
var a = 5, s = "";
switch(a){
case 6: s +=a; break;
case 5: s +=a; break;
case 4: s +=a; break;
case 3: s+=a; break;
default: s+=" s= "+a;
}
alert(s);
Результат:
В случае множественного ветвления оператор switch предпочтительнее вложенных конструкций if-else, т.к. в этом случае получается менее громоздкий и запутанный код. Предыдущий пример без switch выглядел бы так:
var a = 5, s = "";
if(a === 6) s +=a; else
if(a === 5) s +=a; else
if(a === 4) s +=a; else
if(a === 3) s +=a; else
s+=" s= "+a;
alert(s);
13. Циклы в JS. Операторы for, while и do while.
Часто требуется повторить выполнение ряда операторов несколько раз, пока выполняется соответствующее условие. Например, может потребоваться выполнить одно и то же действие с каждым элементом массива, пока не будет достигнут конец этого массива. Как и в других языках программирования, в JavaScript это реализуется с помощью операторов цикла. Циклы продолжают выполнять операторы тела их программного кода до тех пор, пока не будет выполнено условие остановки. В JavaScript поддерживаются циклы while, do-while, for и for-in. Вот
Общий вид цикла while:
while (выражение)
оператор
Благодаря циклу while выполнение некоторого оператора или блока программного кода повторяется до тех пор, пока выражение имеет значение true. Как только выражение получит значение false или будет обнаружен оператор break, произойдет выход из цикла.
Пример цикла while:
var x=0;
while(x < 10) {
document.write(x);
document.write("<br />");
x++;
}
document.write("Готово");
В этом цикле выполняется приращение х до тех пор, пока условие цикла — х меньше 10 — имеет значение true. Как только х принимает значение 10, условие получает значение false, поэтому выполнение цикла заканчивается, а выполнение сценария продолжается с первого оператора, следующего после тела цикла, как показано ниже:
Цикл do-while подобен циклу while, за исключением того, что проверка условия выполняется в конце цикла. Другими словами, do-while – это цикл с постусловием. Это значит, что указанный цикл всегда выполняется как минимум один раз, если только не будет обнаружен оператор break.
Общая запись этого цикла:
do
оператор;
while (выражение);
Пример:
var x=0;
do {
document.write(x);
document.write("<br />");
x++;
} while(x < 10)
document.write("Готово");
В конце оператора do-while обязательна точка с запятой.
Оператор for используется для создания циклов с параметром (переменной). Он включает в себя установку переменной цикла, проверяемое условие и приращение, размещая все это в одной строке.
Его базовый синтаксис выглядит так:
for (инициализация; условие; обновление_переменной) оператор
Оператор инициализация выполняется перед началом цикла, сам цикл продолжает выполняться до тех пор, пока условие не получит значение false и с каждой итерацией выполняется обновление_переменной.
Пример:
for(x=0; x<10; x++){
document.write(x);
document.write("<br />");
}
document.write("Готово");
Запятая (,) обозначает операцию, позволяющую объединить несколько выражений в одно. Выражения, связанные с помощью запятых, получают значение выражения, которое оказывается крайним справа. Например, в следующем операторе присваивания заключительное присваивание возвратит значение 56, поэтому переменной а будет присвоено именно это значение:
var a,b,c,d;
а = (b=5, с=7, d=56);
Ниже приведен пример, позволяющий с помощью запятой использовать в областях инициализации и обновления переменной цикла for использовать более одного оператора:
for(count1=1, count2=4; (count1 + count2) < 10; count1++, count2++)
document.write("Countl= " +count1+ " Count2 = " +count2+ "<br>");
Вариацией цикла for является конструкция for-in. Эта конструкция позволяет выполнить цикл по различным свойствам объекта.
Общий вид этого цикла:
for (имя_переменной in объект)
оператор
Например, можно выполнить цикл по всем свойствам объекта окна браузера и напечатать их, используя оператор for/in следующего вида:
var aProperty;
for (aProperty in window) {
document.write(aProperty)
document.write("<br />");
}
14. Операторы break и continue в циклах.
JavaScript поддерживает и операторы, используемые для изменения хода выполнения цикла, в частности операторы break и continue. Действие этих операторов подобно соответствующим конструкциям в С, и они часто используются с циклами. Оператор break останавливает выполнение цикла до его логического завершения, а оператор continue останавливает текущую итерацию цикла и возвращает выполнение к проверке условия цикла.
Пример (вывод на экран чисел 1-10, исключая число 5):
var x=0;
while(true){
x++;
if(x >= 10) break;
if(x == 5) continue;
document.write(x);
document.write("<br />");
}
С операторами break и continue можно использовать метки, чтобы направить поток выполнения программы по более точному руслу. Метка — это просто идентификатор, завершенный двоеточием, который применяется к оператору или блоку программного кода. Пример:
outerloop: for (var i = 0; i < 3; i++) {
document.write("Внешний цикл: "+i+"<br />");
for (var j = 0; j < 5; j++) {
if (j == 3)
break outerloop;
document.write("Внутренний цикл: "+j+"<br />");
}
}
document.write("Все циклы завершены"+"<br />");
Метку можно также использовать с оператором continue. Такой оператор continue заставит передать управление потоком выполнения программы циклу, указанному меткой.
15. Основы построения функций. Оператор return.
Функции JavaScript объявляются с помощью ключевого слова function, а содержащиеся в них операторы заключаются в фигурные скобки. Аргументы функции указываются в круглых скобках после имени функции и разделяются запятыми. Например:
function add(x, y){
var sum = x + y;
return sum;
}
Этот программный код объявляет функцию с именем add, которая вычисляет сумму аргументов и "возвращает" вычисленное значение. Оператор return сообщает интерпретатору, какое значение должна вычислить функция. Можно, например, установить значение функции равным значению некоторой переменной:
var result = add(2, 3);
Функции передаются аргументы 2 и 3, выполняются операторы тела функции, а результат сложения аргументов — значение 5 — помещается в переменную result.
Кроме передачи функции литеральных значений, можно передавать функциям и переменные. Например:
var a=3, b=5;
var result;
result = add(a,b);
Функции в JavaScript на самом деле являются полноценными типами данных. Это значит, что функции рассматриваются наравне с другими непримитивными типами. Их можно присваивать переменным, передавать другим функциям, создавать и уничтожать динамически.
16. Глобальные и локальные переменные.
В переменных хранятся данные. Каждая переменная имеет имя, называемое идентификатором. В JavaScript переменные объявляются с помощью var — ключевого слова, которое выделяет память для новых данных и сообщает интерпретатору о том, что вводится новый идентификатор. Объявить переменную просто:
var х;
Этот оператор говорит интерпретатору о том, что новая переменная х готова к использованию. В отличие от С++ и подобных языков, не требуется указывать тип переменной при ее объявлении, т.к. в JavaScript принят слабый (динамический) контроль типов. При объявлении переменной можно присвоить ей и начальное значение. Такой оператор называют оператором инициализации:
var х = 2;
Кроме того, одним оператором var можно объявить много переменных, если разделить переменные запятыми (при этом можно смешивать операторы объявления и инициализации):
var х, у = 2, z;
Не следует использовать переменные без предварительного их объявления, хотя в определенных случаях это возможно. Использование переменной в правой стороне оператора присваивания без предварительного ее объявления приводит к ошибке.
Что есть глобальные переменные: переменные "видимые" в любой точке выполнения программы, везде из можно прочитать и перезаписать. Обычно глобальные переменные определяются в самом начале программы, вне всяких блоков ({}) в случае Js, они задаются после script, или все всяких функций
Таким образом, получается, что на глобальную область использование var никак не влияет. Переменная, упомянутая в script вне процедур считается глобальной даже, если она заключения в скобочки {} блока if while for и других области останется глобальной даже внутри циклов
локальные переменные- переменные задаваемые внутри исполняемого блока (функции) и не виляют на другие функции. и внешнюю среду, т.е. глобальную область.
17. Функции, как обьекты.
Функции JavaScript объявляются с помощью ключевого слова function, а содержащиеся в них операторы заключаются в фигурные скобки. Аргументы функции указываются в круглых скобках после имени функции и разделяются запятыми. Например:
function add(x, y){
var sum = x + y;
return sum;
}
Этот программный код объявляет функцию с именем add, которая вычисляет сумму аргументов и "возвращает" вычисленное значение. Оператор return сообщает интерпретатору, какое значение должна вычислить функция. Можно, например, установить значение функции равным значению некоторой переменной:
var result = add(2, 3);
Функции передаются аргументы 2 и 3, выполняются операторы тела функции, а результат сложения аргументов — значение 5 — помещается в переменную result.
Кроме передачи функции литеральных значений, можно передавать функциям и переменные. Например:
var a=3, b=5;
var result;
result = add(a,b);
Функции в JavaScript на самом деле являются полноценными типами данных. Это значит, что функции рассматриваются наравне с другими непримитивными типами. Их можно присваивать переменным, передавать другим функциям, создавать и уничтожать динамически.
18. Принципы работы с объектами.
Свойства
Свойство объекта — это именованный фрагмент содержащихся в объекте данных. Свойства доступны с помощью применения к объекту операции, обозначаемой точкой (.). Например,
var myString = new String("Всем привет");
alert(myString.length);
обеспечивает доступ к свойству length объекта String, на который ссылается переменная myString.
Попытка доступа к несуществующему свойству возвращает значение undefined:
var myString = new String("Всем привет");
alert(myString.noSuchValue);
В JavaScript также можно использовать свойства экземпляра — свойства, динамически добавляемые сценарием:
var myString = new String("Всем привет");
myString.simpleExample = true;
alert(myString.simpleExample);
Свойства экземпляра называются так потому, что они присутствуют только в экземпляре объекта, к которому они добавлены, и в противоположность свойствам объекта типа String.length, которые обязательно присутствуют в любом экземпляре объекта String. Свойства экземпляра удобно использовать для расширения возможностей существующих объектов с целью их адаптации к выполнению конкретных задач.
Удалить свойства экземпляра можно с помощью операции delete. Пример:
var myString = new String("Всем привет");
myString.simpleExample = true;
delete myString.simpleExample;
alert("Значением myString.simpleExample является " + myString.SimpleExample);
Результат:
Методы
Свойства, являющиеся функциями, называются методами. Доступ к методам обычно осуществляется с помощью операции точки, аналогично доступу к свойствам. Следующий пример иллюстрирует вызов метода toUpperCase () объекта String:
var myString = new String("Я говорю не слишком громко? ");
alert(myString.toUpperCase()) ;
Можно использовать и синтаксис массива:
var myString = new String("Я говорю не слишком громко? ");
alert(myString["toUpperCase"]());
но такой вариант используется редко.
Установка методов экземпляра тоже аналогична установке свойств экземпляра:
var myString = new String("Я говорю не слишком громко? ");
myString.sayNo = function() { alert("Да нет.");};
myString.sayNo();
19. Базовые и пользовательские объекты. Литералы объектов. Объекты как ассоциативные массивы.
Базовые и пользовательские объекты
В JavaScript можно создавать объекты типа Object. Эти базовые объекты могут использоваться для создания пользовательских типов данных. Как и любому объекту в JavaScript, объекту Object можно динамически добавлять свойства:
var robot = new Object();
robot.name = "Парабеллум";
robot.model = "Страж";
robot.hasJetpack = true;
Динамически можно добавлять и функции:
function strikeIntruder(){
alert("БАХ!");
}
robot.attack = strikeIntruder ();
Обратите внимание на то, что мы назвали метод attack, хотя функция называлась strikeIntruder. Это связано с тем, что функция strikeIntruder была добавлена объекту robot как метод attack. Можно использовать и анонимную функцию:
robot.attack = function(){
alert("БАХ!");
};
Этот синтаксис более предпочтителен.
Объекты как ассоциативные массивы
Ассоциативный массив — это структура данных, позволяющая связать данные с именами (иногда такие структуры называют ассоциативными матрицами). В обычном массиве элементы ассоциируются с целыми числами, указывающими их индексы. В ассоциативном массиве элементы ассоциируются с именами, которые являются строками. Например, можно иметь ассоциативный массив, индексированный по имени, которое дает адрес заказчика или телефонный номер. Использование ассоциативных массивов упрощает задачу поиска данных.
JavaScript обеспечивает возможность использования ассоциативных массивов вследствие того факта, что следующие два оператора эквивалентны:
объект.свойство
и
объект["свойство"]
Ассоциативные массивы в JavaScript — это просто объекты, используемые с синтаксисом массивов, а пары ключ/значение — это имена свойств экземпляра и их значения. Сохранять значения в массиве можно следующим образом:
var customers = new Object();
customers["John Doe"] = "123 Main St., Metropolis, USA";
А извлечь их можно так:
var address = customers["John Doe"];
Литералы представляют собой константы, непосредственно включаемые в текст программы в отличие от прочих данных — констант и переменных, обращение к которым осуществляется посредством ссылок. Литералы не могут быть изменены в тексте программы.
Литералы объектов. JavaScript поддерживает синтаксис литералов для многих типов данных (в частности, для чисел, строк, массивов и функций), поэтому нет ничего неожиданного в том, что в JavaScript 1.2+ поддерживаются литералы объектов. Их синтаксис - это заключенный в фигурные скобки список разделенных запятыми пар свойство/значение. Пара свойство/значение задается с помощью указания имени свойства, за которым после двоеточия следует соответствующее значение. Ниже предлагается новый вариант предыдущего примера, в котором используются литералы, как объекта, так и функции:
var robot = { name: "Парабеллум", model: "Страж", hasJetpack: true, attack: function() { alert("БАХ!"); } };
20. Прототипы и конструкторы.
Конструкторы
Экземпляры объектов создаются с помощью конструкторов. Конструктор – это специальная функция, которая имеет такое же имя, как и объект. Конструктор содержит прототип объекта, который и определяет программный код и данные, получаемые каждым экземпляром объекта по умолчанию.
Поскольку конструкторы являются методами, им можно передавать аргументы, чтобы указать начальные значения.
Общий вид создания объектов с помощью конструкторов:
var имя_переменной = new имя_объекта(список_параметров);
Пример: var s = new String();
Можно определить собственный конструктор с помощью функции:
function Robot(){
}
Эта функция сама по себе ничего не делает. Но ее можно вызвать как конструктор:
var guard = new Robot();
Мы создали экземпляр объекта Robot. При вызове конструктора интерпретатор выделяет память для нового объекта и неявно передает новый объект соответствующей функции. Конструктор может получить доступ к создаваемому объекту, используя this — специальное ключевое слово, содержащее ссылку на текущий объект (для конструктора текущий объект – это новый объект, создаваемый этим конструктором). Интерпретатор делает this доступным, чтобы конструктор мог работать с создаваемым им объектом. Например, это ключевое слово можно использовать для установки значений по умолчанию. Переопределим наш конструктор, чтобы отразить указанную возможность:
function Robot(){
}
function Robot(needsToFly){
if (needsToFly)
this.hasJetpack = true;
else
this.hasJetpack = false;
}
var guard = new Robot(true);
var sidekick = new Robot();
В этом примере мы могли бы явно передать значение false при создании экземпляра sidekick. Но, не передав ничего, мы неявно сделали то же самое, поскольку параметр needsToFly в этом случае получает значение undefined.
В создаваемый объект можно добавлять и методы. Одним из вариантов здесь является назначение некоторой переменной экземпляра подходящей анонимной функции внутри конструктора, точно так же, как выше добавлялось свойство экземпляра. Однако это оказывается слишком расточительным с точки зрения затрат памяти, поскольку собственную копию этой функции будет иметь каждый созданный объект. Лучшим способом достижения той же цели было бы использование прототипа объекта.
Прототипы
Каждый объект имеет свойство prototype, указывающее на прототип, который задает структуру объекта. Это ссылка на Object, описывающий программный код и данные, которые будут общими для всех объектов этого типа. Можно добавить в прототип конструктора программный код и данные, которыми должны обладать все объекты Robot. Для этого модифицируем наше определение следующим образом:
Robot.prototype.hasJetpack = false;
Robot.prototype.doAction = function(){
alert("Тревога!");
}
В этом примере мы переместили свойство hasJetpack в прототип и дали этому свойству значение по умолчанию — false. Во-вторых, мы добавили в прототип конструктора функцию doAction (). Каждый создаваемый объект Robot теперь будет иметь оба свойства:
var guard = new Robot(true);
var canFly = guard.hasJetpack;
guard.doAction();
Методы могут ссылаться на экземпляр объекта, в котором они содержатся, с помощью this. Можно снова переопределить наш класс, чтобы продемонстрировать эту новую возможность:
Robot.prototype.hasJetpack = false;
Robot.prototype.actionValue = "Тревога! Нарушитель!";
Robot.prototype.doAction = function(){alert(this.actionValue);};
Прототип является общим для всех объектов. Это значит, что имеется только одна копия прототипа, которую используют все объекты, созданные с помощью одного конструктора. Изменение в прототипе будет видимым для всех объектов, совместно использующих этот прототип! Именно поэтому значение по умолчанию в Прототипе заменяется переменными экземпляра, а не изменяются непосредственно. Изменение их в прототипе должно изменить соответствующее значение для всех объектов, совместно использующих этот прототип.
Изменение прототипов встроенных объектов может оказаться очень полезным. Предположим, что вам часто приходится извлекать из строк третий символ. Можно изменить прототип объекта String так, чтобы все строки имели определенный вами метод:
String.prototype.getThirdChar = function() {
return this.charAt(2);
}
После этого вы можете вызывать этот метод точно так же, как любой встроенный метод объекта String:
var с = "Пример".getThirdChar();
т
21. Наследование, замещение свойств
Наследование через цепочку прототипов
Наследование в JavaScript проводится через прототипы; конкретные экземпляры объекта "наследуют" программный код и данные, имеющиеся в прототипе конструктора. Но можно получить новый тип объекта из типа, который уже существует. Экземпляры нового типа наследуют все свойства их собственного типа вдобавок к свойствам, воплощенным в их "родителе".
Например, с помощью "связывания" прототипов можно определить новый тип объекта, который наследует все возможности нашего объекта Robot:
function UltraRobot(extraFeature) {
if (extraFeature)
this.feature = extraFeature;
}
UltraRobot.prototype = new Robot();
UltraRobot.prototype.feature = "Радар";
Единственным новым для нас действием в этом примере является назначение прототипу UltraRobot нового экземпляра объекта Robot. Поскольку поиск свойств выполняется через прототипы, объекты UltraRobot будут обладать как свойствами UltraRobot, так и свойствами Robot:
var guard = new UltraRobot("Выполняет вычисления");
var feature = guard.feature;
var canFly = guard.hasJetpack;
guard.doAction();
Способ проверки доступности свойств интерпретатором в этом примере аналогичен тому, который обсуждался выше. Сначала проверяются свойства экземпляра объекта, затем, если совпадения не обнаружено, проверяется прототип (UltraRobot). Если совпадений не обнаружено и в прототипе, проверяется прототип "родителя" (Robot), и далее процесс повторяется рекурсивно вплоть до Object.
Замена свойств
Часто бывает полезно заменить поведение "родителя" новым, чтобы обеспечить нужные свойства для пользовательских объектов. Например, значением по умолчанию toString () для объектов является " [object Object] ". Если нужно заменить такое поведение, то можно создать новый, более подходящий метод toString () для объектов определенных типов:
Robot.prototype.toString = function() { return "[object Robot]"; };
Для классов, унаследованных от Robot, метод можно тоже заменить, например, так:
UltraRobot.prototype.toString = function() {return "[object UltraRobot]"; };
Объект Date обеспечивает сложное множество методов для работы с датами и значениями времени.
JavaScript хранит даты в виде числа миллисекунд, прошедших с начала "эпохи" — 1 января 1970 г. (GMT). Это артефакт способа хранения времени в системах UNIX, что может вызвать проблемы, если вам придется работать с датами до начала "эпохи" в старых браузерах.
При чтении текущих даты и времени сценарий полностью находится "во власти" времени, установленного на машине клиента. Если дата или время клиента окажутся некорректными, ваш сценарий отобразит этот факт.
Дни недели и месяцы года перечисляются, начиная с нуля. Так что день 0 — это воскресенье, а день 6 — суббота, месяц 0 — это январь, а месяц 11 — декабрь. Однако нумерация дней месяца начинается с единицы.
-
— Создается объект с текущими датой и временем var rightNow * new Date ();
-
"месяц дд, ггггчч.ммхс" Создается объект с датой, представленной указанными месяцем, днем (дд), годом (гггг), часом (чч), минутами (мм) и секундами (сс). Все пропущенные значения считаются равными нулю var birthDay = new Date("March 24, 1970");
-
Миллисекунды Создается объект с датой, представленной указанным целого числа миллисекунд, прошедших с начала "эпохи" var someDate = new Date(795600003020);
-
rrrr, мм, дд Создается объект с датой, представленной указанными целыми значениями года (гггг), месяца (мм) и дня (дд) var birthDay = new Date(1970, 2, 24);
-
гггг, мм, дд, чч, мм, сс Создается объект с датой, представленной указанными целыми значениями года, месяца, дня, часа, минут и секунд var birthDay = new Date(1970, 2, 24, 15, 0, 0);
-
гггг, мм, дд, чч, мм, сс, мс Создается объект с датой, представленной указанными целыми значениями года, месяца, дня, часа, минут, секунд и миллисекунд var birthDay « new Date(1970, 2, 24, 15, 0, 250);
Методы для работы с датой :
-
год - getFullYear – возвращает значение года без параметров
с параметрами setFullYear – set FullYear (YearValue [,Monthvalue [,Day value]]);
-
месяц – getMonth()
setMonth(mothvalue[dayvalue]);
-
день - getDay()
setDay(dayvalue);
-
часы - getHours()
setHours (Hoursvalue[,minutesvalue[,secondvalue[,msValue]]]);
-
минуты, секунды, миллисекунды.
Преобразование даты в строку
-
toString();
-
toLocalString();
-
toGMTString();
-
toUTString();
Преобразование строк в дату – parse()
var today = new Date("18 Jan 2010");
today.setFullYear(2008, 11, 21);
today.setHours(15, 25, 0, 0);
alert(today.toLocaleString());