Интернет. Железо. Программы. Обзоры. Операционные системы
Поиск по сайту

Где формируется объект data js. Как использовать data-атрибуты HTML5

Метод data в jQuery даёт нам возможность связать произвольные данные с любым объектом документа или javaScript, что позволяет сделать ваш код более кратким и читаемым. Начиная с версии jQuery 1.4.3 появилась возможность использовать этот метод для объектов javaScript, а также отслеживать изменения этих данных.

Основы

Начнём с того, что вы можете вызвать метод data для jQuery объекта, а также использовать функцию $.data() напрямую.

// Использование метода: $("#myDiv").data("key","произвольное значение"); // Использование функции напрямую: $.data($("#myDiv").get(0),"key","произвольное значение");

Функция data - это низкоуровневая реализация, которая в действительности используется при вызове метода. Метод объекта jQuery гораздо удобнее, он также позволяет включать себя в качестве цепочки вызовов.

Также, обратите внимание, что в качестве первого параметра в функцию $.data вам необходимо передавать DOM-элемент, а не объект jQuery.

Метод объекта требует двух параметров - ключ и значение. Ключ - строковая константа, а значение - любая структура данных, включая функции массивы и объекты. Существует альтернативный синтаксис, в котором можно передавать объект как один параметр:

// Можно передать объект: $("#myDiv").data({"name":"Stevie","age":21}); // Тоже самое: $("#myDiv").data("name","Stevie").data("age",21);

Теперь, если вам необходимо получить сохранённые данные, вы можете вызвать функцию data , передав ей ключ в качестве параметра:

Var theValue = $("#myDiv").data("age"); // 21

Доступ к этим данным открыт в любом месте скрипта. Вы будете получать сохранённые данные, до тех пор, пока существует элемент, получаемый по заданному селектору.

Var theValue = $("div:first").data("name"); // Stevie $("div:first").click(function(){ alert($(this).data("age"); // 21 });

В jQuery 1.4.3 также доступны HTML5-данные, хранимые в атрибутах. Это означает, что если у вас есть элемент, объявленный следующим образом:

В этом случае вы можете получить данные из атрибута data-internal-id , вызвав метод $("#img1").data("internal-id") , что несомненно удобно при AJAX-запросах.

Использование метода data для javaScript-объектов

Возможно, вы будете удивлены, но метод data также можно использовать для обычных объектов javaScript. Эта функциональность официально появилась в jQuery 1.4.3.

Var myObj = {}; $(myObj).data("city","Springfield");

Приведённый пример, в действительности создаёт свойство city для заданного объекта. Почему бы в таком случае не написать просто myObj.city = "Springfield"? А отличие в том, что метод data добавляет объекту несколько полезных событий, упрощающих работу с этим объектом. Например:

Var progressBar = {}; $(progressBar).bind("setData",function(e,key,value){ switch(key){ case "percent": $("#progress").width(value+"%"); $("#percentText").text(value+"%"); break; case "color": $("#progress").css("color",value); break; case "enabled": $("#progress").toggleClass("active",value); break; } }); $(progressBar).data("enabled",true).data("percent",21).data("color","green"); console.log(progressBar.enabled);

В приведённом примере мы используем метод data чтобы создать простейший API с помощью которого мы можем обновлять элемент.

Существует ещё два события, которые могут использоваться для объекта javaScript:

  • getData - срабатывает перед чтением данных. Вы можете использовать его для предобработки получаемых данных. Например, для пересчёта значения.
  • changeData - срабатывает когда данные устанавливаются или изменяются. Это событие используется в плагине jQuery datalink . С его помощью можно связать данные формы с объектом javaScript и работать с полями формы как со свойствами объекта.
За кулисами

jQuery создаёт пустой объект (для любопытных, он называется $.cache), который и является хранилищем всех значений, которые вы сохраняете с помощью метода data . Каждому элементу из DOM, который используется с методом data , присваивается уникальный идентификатор, который затем является ключом для доступа к данным в объекте $.cache .

jQuery хранит в этом кэше не только пользовательские данные, туда попадают также внутренние данные, обработчики событий, которые вы навешиваете с помощью функций live() , bind() и delegate() . Использование центрального хранилища делает jQuery более надёжным.

Заключение

Метод data - это только одна из многочисленных возможностей jQuery, которая делает жизнь веб-разработчиков проще. В сочетании с другими возможностями библиотеки, она дополняет прочную основу, на которую мы можем положиться.

При работе с датой и временем в JavaScript используется объект Date . Думаю, что не надо объяснять, как часто приходится работать с датой и временем. И в этой статье Вы узнаете, как это делать в JavaScript .

Начнём, по традиции, с конструкторов объекта Date . Их целых четыре. Первый конструктор без параметров, и он возвращает текущие время и дату:

Var date = new Date();
document.write(date);

В результате, Вы увидите что-то в этом духе: "Thu Oct 14 2010 11:42:06 GMT+0400 ".

Второй конструктор объекта Date - это конструктор с одним параметром. Этот параметр содержит количество миллисекунд прошедших с 01.01.1970 (зарождение эпохи Unix ). Например, так:

Var date = new Date(135253235);
document.write(date);

В результате Вы увидите следующее: "Fri Jan 02 1970 16:34:13 GMT+0300 ".

Следующий конструктор позволяет создать объект Date с заданием следующих параметров: года, месяца и числа:

Var date = new Date(2010, 0, 12);
document.write(date);

Результат: "Tue Jan 12 2010 00:00:00 GMT+0300 ". Также заметьте, что 0-ой месяц - это январь, а 11-ый - это декабрь.

И последний конструктор класса Date в JavaScript позволяет создать объект Date со всеми параметрами даты и времени: год, месяц, число, часы, минуты и секунды.

Var date = new Date(2010, 0, 12, 23, 45, 12);
document.write(date);

Получится вот такая строка: "Tue Jan 12 2010 23:45:11 GMT+0300 ". Вот и все конструкторы объекта Date в JavaScript , которые нам предоставили разработчики.

Особых свойств у класса Date нет, поэтому сразу переходим к методам. Начнём сразу с группы методов, которые работают совершенно одинаково, но каждый из них возвращает свой элемент даты и времени:

Var date = new Date();
document.write("Год - " + date.getFullYear() + "
");
document.write("Месяц - " + date.getMonth() + "
");
document.write("Число - " + date.getDate() + "
");
document.write("День недели - " + date.getDay() + "
");
document.write("Час - " + date.getHours() + "
");
document.write("Минута - " + date.getMinutes() + "
");
document.write("Секунда - " + date.getSeconds() + "
");
document.write("Миллисекунда - " + date.getMilliseconds() + "
");
document.write("Количество миллисекунд прошедших с 01.01.1970 - " + date.getTime() + "
");

Запустив данный скрипт, Вы мгновенно поймёте, что каждый из этих методов делает. Единственное, что хочется заметить, что нумерация дней недели начинается также с нуля . Причём воскресенье имеет индекс 0 , а суббота - 6 .

Есть аналогичные методы, но показывающие дату и время по Гринвичу . Давайте напишем такой код:

Var date = new Date();
document.write("Год - " + date.getUTCFullYear() + "
");
document.write("Месяц - " + date.getUTCMonth() + "
");
document.write("Число - " + date.getUTCDate() + "
");
document.write("День недели - " + date.getUTCDay() + "
");
document.write("Час - " + date.getUTCHours() + "
");
document.write("Минута - " + date.getUTCMinutes() + "
");
document.write("Секунда - " + date.getUTCSeconds() + "
");
document.write("Миллисекунда - " + date.getUTCMilliseconds() + "
");

Запустив этот скрипт, Вы узнаете текущие дату и время на Гринвиче .

Противоположные методам get() являются методы - set() . Если первые возвращают определённые значения, то последние, наоборот, их изменяют. Собственно, данный скрипт я мог бы не приводить, но, чтобы не осталось никаких вопросов, давайте это сделаю:

Var date = new Date();
date.setFullYear(1990);
date.setMonth(11);
date.setDate(15);
date.setHours(9);
date.setMinutes(20);
date.setSeconds(0);
date.setMilliseconds(10);
document.write(date);

Надеюсь, Вы обратили внимание, что метода setDay() не существует. Это говорит о том, что день недели подбирается в зависимости от года, месяца и числа.

Существует также аналогичные методы для Гринвича. Только добавляется приставка UTC , например, для изменения месяца используется метод setUTCMonth() .

И последний метод - это setTime() . Принимает в качестве параметра число миллисекунд прошедших с 01.01.1970 :

Date.setTime(39293012);
document.write(date);

В результате Вы увидите вот это: "Thu Jan 01 1970 13:54:53 GMT+0300 ".

Вот и все конструкторы и методы объекта Date в JavaScript .

Давным-давно, во времена XHTML/HTML4 у разработчиков было всего несколько возможностей, которыми они могли пользоваться для того, чтобы хранить произвольные данные, относящиеся к DOM. Вы могли изобретать свои собственные атрибуты, но это было рискованно - ваш код не был бы валидным, браузеры могли игнорировать ваши данные, и это могло вызвать проблемы, если название совпадало со стандартными атрибутами HTML.

Поэтому большинство разработчиков завязывались на атрибуты class или rel так как они были единственным разумным способом хранить дополнительные строки. К примеру, предположим, что мы создаем виджет для отображения сообщений типа временной линии сообщений в Twitter. В идеале JavaScript должен иметь возможность конфигурирования без необходимости переписывать код, так что мы определяем идентификатор пользователя в атрибуте class, например:

Наш JavaScript код будет искать элемент с ID msglist . С помощью скрипта мы будем искать классы, начинающиеся с user_ , а “bob” в нашем случае будет идентификатором пользователя, и мы отобразим все сообщения этого пользователя.

Скажем, мы бы хотели также задать максимальное количество сообщений, и пропускать сообщения старше шести месяцев (180 дней):

Наш атрибут class очень быстро загромождается - проще допустить ошибку, а разбор строк на JavaScript становится все сложнее.

Data-атрибуты HTML5

К счастью, в HTML5 была введена возможность использовать пользовательские атрибуты. Вы можете использовать любое имя в нижнем регистре с префиксом data- , например:

Пользовательские data-атрибуты:

  • это строки - в них вы можете хранить любую информацию, которая может быть представлена или закодирована в виде строки, например JSON. Приведение типов должно осуществляться с помощью JavaScript
  • должны использоваться в тех случаях, когда нет подходящих элементов HTML5 или атрибутов
  • относятся только к странице. В отличие от микроформатов они должны игнорироваться внешними системами, типа поисковых систем и поисковых роботов
Пример №1 обработки на JavaScript: getAttribute и setAttribute

Все браузеры позволяют вам получить и изменить data-атрибуты с использованием методов getAttribute и setAttribute:

Var msglist = document.getElementById("msglist"); var show = msglist.getAttribute("data-list-size"); msglist.setAttribute("data-list-size", +show+3);

Это работает, но должно использоваться только для поддержания совместимости со старыми браузерами.

Пример №2 обработки на JavaScript: метод data() библиотеки jQuery

Начиная с версии jQuery 1.4.3 метод data() обрабатывает data-атрибуты HTML5. Вам нет необходимости явно указывать префикс data- , так что подобный код будет работать:

Var msglist = $("#msglist"); var show = msglist.data("list-size"); msglist.data("list-size", show+3);

Но как бы то ни было, имейте в виду, что jQuery пытается конвертировать значения таких атрибутов в подхдящие типы (булевы значения, числа, объекты, массивы или null) и затронет DOM. В отличие от setAttribute , метод data() физически не заменит атрибут data-list-size - если вы проверите его значение вне jQuery - оно все еще останется равным 5.

Пример №3 обработки на JavaScript: API для работы с наборами данных

И, наконец, у нас есть API для работы с наборами данных HTML5, которое возвращает объект DOMStringMap. Необходимо помнить, что data-атрибуты отображаются в объект без префиксов data- , из названий убираются знаки дефиса, а сами названия конвертируются в camelCase, например:

Имя атрибута Имя в API набора данных
data-user user
data-maxage maxage
data-list-size listSize

Наш новый код:

Var msglist = document.getElementById("msglist"); var show = msglist.dataset.listSize; msglist.dataset.listSize = +show+3;

Данный API поддерживается всеми современными браузерами, но не IE10 и ниже. Для таких браузеров существует обходной путь , но, наверное, куда практичнее использовать jQuery, если вы пишете для старых браузеров.

На уроке будет рассмотрена темы Javascript объекты. Речь пойдет о пользовательских объектах: создание объекта в javaScript, работа со свойствами и методами объекта, а также javascript прототипами. Кратко излагается работа с объектами Location , Navigator , Screen


Задача сайта сайт — получение пользователями практических навыков работы с языком. Лабораторные работы по javaScript, изложенные по мере увеличения их сложности и подкрепляемые наглядными решенными примерами, позволят с легкостью воспринять изучаемый материал и научиться самостоятельно создавать «живые», динамические веб-страницы.


В javaScript существует несколько видов объектов:

  • встроенные объекты
  • объекты браузера
  • объекты, которые программист создает самостоятельно (пользовательские)

Встроенные объекты — это предопределенные объекты , … Большинство из которых уже были рассмотрены в предыдущих уроках.

Об объектах браузера в javaScript речь пойдет в дальнейших уроках.

А сейчас время познакомиться с пользовательскими объектами в javaScript .

  • Object(объекты)
  • Number (обработка чисел)
  • String (обработка строк)
  • Array (массивы)
  • Math (математические формулы, функции и константы)
  • Date (работа с датами и временем)
  • RegExp
  • Global (его свойства Infinity, NaN, undefined)
  • Function
JavaScript создание объектов

Существует 2 способа создания объектов:

  • Использование инициализатора объекта (или создание объектов-коллекций)
  • Использование конструктора объектов ()
  • Создание объектов-коллекций
  • var имя_объекта = new Object(); имя_объекта.свойство = значение;// точечная нотация имя_объекта["свойство"] = значение;// скобочная нотация

    Важно: Стоит заметить, что в качестве значения нельзя использовать цифру: myObg.rost = 2 // НЕЛЬЗЯ! myObg.rost = "2" // можно

    Пример: Создать объект myBrowser со свойствами name (значение ) и version (значение «9.0 »)


    ✍ Решение 1:

      var myBrowser = new Object(); myBrowser.name= "Microsoft Internet Explorer"; myBrowser["version"]= "9.0";

    Пример: Создать два объекта-коллекции (car и moto) со свойствами color и brand . Вывести значение свойства color у объекта car и свойства brand у объекта moto .


    ✍ Решение:
      var car = new Object () ; car.color = "Белый" ; car.maxSpeed = 220 ; car.brand = "Nissan" ; document.write ("У машины цвет: " + car.color ) ; var moto = { color: "Синий" , horsePower: 130 , brand: "Yamaha" } ; document.write ("У мотоцикла производитель: " + moto.brand ) ;

      var car = new Object(); car.color = "Белый"; car.maxSpeed=220; car.brand = "Nissan"; document.write("У машины цвет: " + car.color); var moto = { color: "Синий", horsePower: 130, brand: "Yamaha" }; document.write("У мотоцикла производитель: " + moto.brand);

    Цикл «для каждого» for in при работе с объектами в javascript

    Совсем немного об этой конструкции уже было сказано в .
    Цикл for in в javascript предназначен для прохода по массивам, коллекциям и объектам.

    Рассмотрим пример использования for in:

    1 2 3 4 5 6 7 8 var myBrowser = new Object () ; myBrowser.name = "Microsoft Internet Explorer" ; myBrowser[ "version" ] = "9.0" ; for (var a in myBrowser) { alert(a) ; // Перебирает свойства объекта myBrowser. Выдаст name, version alert(myBrowser[ a] ) ; // Выдаст значения свойств }

    var myBrowser = new Object(); myBrowser.name= "Microsoft Internet Explorer"; myBrowser["version"]= "9.0"; for (var a in myBrowser) { alert(a); // Перебирает свойства объекта myBrowser. Выдаст name, version alert(myBrowser[a]); // Выдаст значения свойств }

  • Создание классов-конструкторов
  • Создание классов-конструкторов осуществляется в два этапа:

  • сначала создается класс с помощью конструктора;
  • затем создается новый объект на основе конструктора.
  • Создание класса объектов с помощью конструктора (создание классов-конструкторов):

    function Имя_класса_объектов(св-во1, св-во2){ this.св-во1 = значение; this.св-во2 = значение; }

    Создание нового объекта на основе конструктора для класса объектов:

    var имя_объекта = new имя_класса("значение_св-ва1","значение_св-ва2");

    var имя_объекта =new имя_класса(); имя_объекта.св-во1="значение_св-ва1"; имя_объекта.св-во2="значение_св-ва2";

    Название класса конструктора принято писать с заглавной буквы!


    Рассмотрим пример:

    Пример: Создание конструктора для класса объектов и создание объекта на основе этого класса: создать объект myBrowser со свойствами name (значение “Microsoft Internet Explorer” ) и version (значение «9.0 »)

    Открыть решение

    1 2 3 4 5 6 7 8 function Browser (name, version) { this .name = name; this .version = version; } var myBrowser = new Browser("Microsoft Internet Explorer" , "9.0" ) ; alert(myBrowser.name ) ; alert(myBrowser.version ) ;

    function Browser (name, version){ this.name = name; this.version = version; } var myBrowser = new Browser("Microsoft Internet Explorer","9.0"); alert(myBrowser.name); alert(myBrowser.version);

    Итак, сравним еще раз с первым способом создания объектов:

    // объект-коллекция var myBrowser = {name: "Microsoft Internet Explorer", version: "7.0"}; alert(myBrowser.name); alert(myBrowser.version); // следующая строка недопустима! var myBrowser1 = new myBrowser ("MozillaFirefox","3.5"); // НЕ ВЕРНО! !!

    Важно: В случае создания объекта-коллекции нельзя создавать экземляр класса, так как это не класс


    Задание js 6_1. Создать объект Сотрудник, который содержит сведения о сотрудниках некоторой фирмы, такие как Имя, Отдел, Телефон, Зарплата (использовать функцию-конструктор и ключевое слово this). Создать экземпляр объекта

    Доступ к свойствам объектов в javaScript

    Имя_объекта. имя_свойства

    1 2 agent007.Имя = "Бонд" ; alert(agent007.Имя) ;

    agent007.Имя = "Бонд"; alert(agent007.Имя);

    Что такое свойство по умолчанию

    Функция-конструктор позволяет наделить объект свойствами по умолчанию. Эти свойства будут у каждого создаваемого экземпляра объекта

    1 2 3 4 5 6 7 8 9 10 function Student(name, phone) { this .name = name; this .phone = "22-22-22" ; // свойство по умолчанию! } var ivanov = new Student("Ivan" , "33-33-33" ) ; alert (ivanov.name ) ; // выдаст "Ivan" alert (ivanov.phone ) ; // выдаст "22-22-22" ivanov.phone = "33-33-33" ; //меняем св-во по умолчанию alert (ivanov.phone ) ; // выдаст "33-33-33"

    function Student(name, phone) { this.name=name; this.phone="22-22-22"; // свойство по умолчанию! } var ivanov = new Student("Ivan","33-33-33"); alert (ivanov.name); // выдаст "Ivan" alert (ivanov.phone); // выдаст "22-22-22" ivanov.phone="33-33-33"; //меняем св-во по умолчанию alert (ivanov.phone); // выдаст "33-33-33"

    Добавление свойств к классу объектов

    Значение свойства можно добавить для:

    • конкретного экземпляра объекта;
    • целого класса объектов

    Добавление свойств к конкретному (экземпляру) объекту:

    имя_объекта. имя_свойства = значение

    ivanov.biology = "отлично";

    Важно: В примере свойство задается для конкретного объекта, а не для класса объектов!

    Добавление свойств к классу объектов:

    имя_класса.prototype. имя_свойства = значение

    Student.prototype.biology = "отлично";

    Важно: В примере свойство (по умолчанию) задается для класса объектов! Это сделано при помощи prototype ; прототип — объект, определяющий структуру

    1 2 Student.prototype .email = "[email protected]" ; alert(ivanov.email ) ; // выдаст "[email protected]"

    Student.prototype.email="[email protected]"; alert(ivanov.email); // выдаст "[email protected]"

    Пример: Пример вывода всех свойств объекта со значениями

    1 2 3 4 5 6 7 8 9 var summerTour= { turkey : 2000 , spain : 3000 , egypt : 1000 } ; var option; for (option in summerTour) { document.write (option + ":" + summerTour[ option] + "
    " ) ; }

    var summerTour={ turkey: 2000, spain: 3000, egypt: 1000 }; var option; for (option in summerTour){ document.write(option + ":" + summerTour + "
    "); }

    Javascript прототипы (введение)

    Рассмотрим пример того, как строятся javascript классы на прототипах

    Пример: Создать класс объекта Cаr (автомобиль) с тремя свойствами: name (название), model (модель), color (цвет). Создать экземпляр класса с конкретными значениями свойств. Затем через созданный экземпляр добавить к классу свойство owner (владелец) с конкретным значением по умолчанию (Иванов ). Вывести все значения свойств созданного экземпляра

    function Car(name, model, color) { /* конструктор объекта car*/ this .name = name; this .model = model; this .color = color; } var myCar= new Car; myCar.name = "Мерс" ; myCar.model = "600" ; myCar.color = "green" ; Car.prototype .owner = "Иванов" ; /* добавляем новое свойство*/ alert(myCar.name + " " + myCar.model + " " + myCar.color + " " + myCar.owner ) ;

    function Car(name, model, color) { /* конструктор объекта car*/ this.name = name; this.model = model; this.color = color; } var myCar=new Car; myCar.name="Мерс"; myCar.model="600"; myCar.color="green"; Car.prototype.owner = "Иванов"; /* добавляем новое свойство*/ alert(myCar.name+" "+myCar.model+" "+myCar.color+" "+myCar.owner);

    Задание js 6_2. Для задания js 6_1 через созданный экземляр объекта Сотрудник добавьте новое свойство адрес к классу объектов

    JavaScript методы объектов

    Создание метода объекта

    Пример: Добавить к конструктору объектов Browser метод aboutBrowser , который будет выводить на экран обозревателя информацию о свойствах этого объекта

    1 2 3 4 5 6 7 8 9 10 11 12 13 function showBrowser() { document.write ("Обозреватель: " + this .name + " " + this .version ) ; } function Browser(name, version) { this .name = name; this .version = version; this .aboutBrowser = showBrowser; } var myBrowser= new Browser("Microsoft Internet Explorer" , 8.0 ) ; myBrowser.aboutBrowser () ;

    function showBrowser() { document.write("Обозреватель: " + this.name + " " + this.version); } function Browser(name, version) { this.name = name; this.version = version; this.aboutBrowser = showBrowser; } var myBrowser=new Browser("Microsoft Internet Explorer",8.0); myBrowser.aboutBrowser();

  • Методы объекта создаются на основе функции и добавляются в конструктор класса
  • function Browser(name, version) { this.name = name; this.version = version; this.aboutBrowser = function(){ document.write("Обозреватель: " + name + " " + version); } } var myBrowser=new Browser("Microsoft Internet Explorer",8.0); myBrowser.aboutBrowser();

    Задание js 6_3. Создать класс объектов (Tour) для работы туристической фирмы с методом подсчета стоимости поездки из расчета: количества человек * количество дней * тариф страны . Создать экземпляр объекта turkeyTour со значениями свойств. Вывести все свойства объекта на экран. Метод объекта расчет создавать на основе функции.

    Javascript прототипы (Prototype) встроенных объектов

    Добавление свойств и методов к встроенным объектам (прототип)

    JavaScript — язык ООП (объектно-ориентированного программирования), базирующийся на прототипах.
    Прототип - объект, определяющий структуру

    Рассмотрим работу с прототипами на примере:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 /* Изменение прототипа */ // Добавление свойства по умолчанию к встроенному объекту String .prototype .color = "black" ; // Добавление (изменение) метода к встроенному объекту String .prototype .write = stringWrite; function stringWrite() { document.write ("" ) ; document.write (this .toString () ) ; document.write ("" ) ; } // используем измененный класс var s = new String ("Это строка" ) ; s.color = "red" ; s.write () ;

    /* Изменение прототипа */ // Добавление свойства по умолчанию к встроенному объекту String.prototype.color = "black"; // Добавление (изменение) метода к встроенному объекту String.prototype.write = stringWrite; function stringWrite(){ document.write(""); document.write(this.toString()); document.write(""); } // используем измененный класс var s = new String("Это строка"); s.color = "red"; s.write();

    Важно: К объекту Math нельзя добавлять свойства и методы


    Задание js 6_4. Дополните код программы для выполнения задания: К встроенному классу String добавить метод printMe() , который выводит слово «Ура!» как заголовок (тег h…), указанного пользователем уровня ().
    Уровень заголовка (1, 2 … 6) можно добавить в виде свойства класса String .
    Вспомним, как должны выглядеть теги заголовков в HTML:

    Заголовок

    Дополните код:

    1 2 3 4 5 6 7 8 String .prototype .uroven = "1" ; ... function printZagolovok () { ... ... } var s= new ...; ...

    String.prototype.uroven="1"; ... function printZagolovok (){ ... ... } var s=new ...; ...

    Резюме: сравним еще раз два варианта использования пользовательских объектов в JavaScript:

  • Создание объектов-коллекций
  • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var myBook= new Object () ; myBook.title = "книга" ; myBook.price = "200" ; alert(myBook[ "title" ] ) ; // 1-й вариант обращения к свойствам alert(meBook.price ) ; // 2-й вариант обращения к свойствам function myBookShow() { for (var i in myBook) { document.write (i+ ": " + myBook[ i] + "
    " ) ; // Перебор свойств } } myBook.show = myBookShow; myBook.show () ;

    var myBook=new Object(); myBook.title="книга"; myBook.price="200"; alert(myBook["title"]); // 1-й вариант обращения к свойствам alert(meBook.price); // 2-й вариант обращения к свойствам function myBookShow() { for (var i in myBook) { document.write(i+": "+myBook[i]+"
    "); // Перебор свойств } } myBook.show=myBookShow; myBook.show();

  • Создание классов-конструкторов
  • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function myBook(title, price) { // определение свойств this .title = title; this .price = price; // определение метода this .show = show; function show() { document.write ("Название: " + this .title ) ; document.write ("Цена: " + this .price ) ; } } var book = new myBook("Книга" , 200 ) ; book.show () ;

    function myBook(title,price){ // определение свойств this.title = title; this.price = price; // определение метода this.show = show; function show() { document.write("Название: " + this.title); document.write("Цена: " + this.price); } } var book = new myBook("Книга", 200); book.show();> Перейти на главную страницу ... ...

  • Перейти на главную страницу
  • ...
  • ...
  • *Сложное: количество пунктов меню, их названия и url необходимо запрашивать у пользователя

    Совет: для вывода в методе show() строки на экран воспользуйтесь методом document.write()

    Объекты javaScript Location, Navigator, Screen JavaScript Navigator

    Рассмотрим использование объекта Navigator в javaScript на примере:

    Пример: Написать функцию, которая выводит на экран:

    • название браузера
    • язык браузера
    • название ОС
    • включены ли куки
    • подключен ли пользователь к интернету
    • разрешение экрана
    • глубину цвета
    • адрес загруженной страницы
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var option; // вывод всех свойств объекта navigator for (option in navigator) { document.write (option + " : " + navigator[ option] + "
    " ) ; } // функция выовда конкретных свойств объекта navigator function userDetails () { document.write ("

    Название браузера: " + navigator.userAgent + "
    " ) ; document.write ("Язык браузера: " + navigator.language + "
    " ) ; document.write ("Название ОС: " + navigator.oscpu + "
    " ) ; document.write ("Включены ли куки: " + navigator.cookieEnabled + "
    " ) ; document.write ("Подключен ли Интернет: " + navigator.nLine + "
    " ) ; } userDetails() ;

    var option; // вывод всех свойств объекта navigator for (option in navigator){ document.write(option + " : " + navigator+ "
    "); } // функция выовда конкретных свойств объекта navigator function userDetails (){ document.write("

    Название браузера: " + navigator.userAgent + "
    "); document.write("Язык браузера: " + navigator.language + "
    "); document.write("Название ОС: " + navigator.oscpu + "
    "); document.write("Включены ли куки: " + navigator.cookieEnabled + "
    "); document.write("Подключен ли Интернет: " + navigator.nLine + "
    "); } userDetails();

    Объект javaScript Screen

    Рассмотрим использование объекта Screen в javaScript на примере:

    function userDetails (){ document.write("Разрешение: " + screen.width + " x " + screen.height + "
    "); document.write("Глубина цвета: " + screen.colorDepth + " x " + screen.height + "
    "); } userDetails();

    Объект javaScript Location

    Рассмотрим использование объекта Location в javaScript на примере:

    1 2 3 4 function userDetails () { document.write ("Адрес загруженной страницы: " + location.href + "
    " ) ; } userDetails() ;

    function userDetails (){ document.write("Адрес загруженной страницы: " + location.href + "
    "); } userDetails();

    Выводы:

    • С помощью выражений с ключевым словом new вы можете создавать экземпляры объектов, то есть их конкретные воплощения.
    • Более того, благодаря свойству javascript prototype имеется возможность добавлять к объектам новые свойства и методы, придуманные пользователем и отсутствовавшие в исходных встроенных объектах.
    • Создание объектов можно использовать для создания баз данных.

    В этой главе:

    В языке JavaScript имеется ряд предопределенных объектов, которыми можно пользоваться при написании сценариев. К ним относятся такие объекты, как Array, Boolean, Date, Function, Math, Number, RegExp и String, а так же примитивный объект Object. В ранних версиях языка в него были также включены объекты документа (window, document), однако сейчас они исключены из ядра языка JavaScript, и относятся к определению объектной модели документа (DOM), о которой речь пойдет позже. Тем не менее, некоторые свойства этих объектов (document и window) нам уже знакомы.

    Впрочем, вернемся к встроенным объектам JavaScript в современном понятии. Все встроенные объекты, кроме Math и Date, имеют такие свойства, как constructor и prototype. Они используются для добавления новых свойств к существующим объектам, и описываются в контексте объекта Function.

    Объект Object

    Все объекты языка JavaScript являются наследниками объекта Object. Следовательно, все свойства и методы этого объекта имеются и у любого другого объекта JavaScript.

    Для объекта Object определено всего 2 свойства – constructor и prototype. Свойство constructor определяет функцию, создающую прототип объекта – именно всю функцию целиком, а не только ее название. Иначе говоря, рассмотрим вариант, когда определен некоторый объект test и создан экземпляр этого объекта tmp:

    Function test(version) { this.version = version; } tmp = new test(1);

    В таком случае, воспользовавшись свойством constructor, можно увидеть исходный код объекта test (рис. 4.6):

    Alert(tmp.constructor);

    Рис. 4.6.

    Для этого свойства, правда, имеется одно ограничение: оно не может вывести код встроенных объектов языка JavaScript: в таких случаях выводимая информация ограничивается именем функции прототипа и строкой «».

    Что касается свойства prototype, то оно позволяет получить доступ к функции прототипа текущего объекта. Использование этого свойства дает возможность изменять характеристики прототипа объекта. Например, можно добавить новое свойство для объекта типа test, воспользовавшись свойством prototype:

    Test.prototype.comment = "Новое свойство comment";

    Теперь все объекты типа test, включая уже созданный экземпляр tmp, будут иметь свойство comment, в чем несложно убедиться, применив такую проверку:

    Alert(tmp.comment);

    Более того, подобным образом допускается модернизировать и встроенные объекты JavaScript. Например, если нам требуется добавить к массивам такое свойство, как описание, то можно это сделать (разумеется, только в рамках текущего сценария!), сославшись на прототип объекта Array и добавив к нему соответствующее свойство:

    Array.prototype.description = "";

    Что касается методов, то их для объекта Object определено несколько больше – целых 5 штук. Это toSource, toString, watch, unwatch и valueOf, их краткое описание приведено в таблице 4.10.

    Методы toString и valueOf применимы практически ко всем встроенным объектам JavaScript, и, как правило, вызываются интерпретатором автоматически, когда возникает необходимость произвести преобразование. Что касается метода toSource, то он, фактически, просто выполняет работу для свойства constructor.

    Оставшиеся методы watch и unwatch – фирменные расширения, введенные еще в браузер Netscape 4 (сейчас поддерживаются так же Mozilla), – предназначены для отладки сценариев. Поскольку в рамках настоящего издания вопрос отладки программ рассматривается не будет, то и описывать эти методы нет смысла. Но на всякий случай, можете взять себе на заметку, что в Sea Monkey (но не в браузере Firefox) имеется отладчик сценариев – JavaScript Debugger.

    Объект Array

    Переменные-массивы содержат упорядоченные наборы значений, для удобства представленные в виде одной переменной. Мы не раз уже сталкивались с массивами (вспомните хотя бы массивы аргументов), теперь пришло время разобраться со всеми их свойствами и тонкостями применения.

    В отличие от других языков программирования, JavaScript не имеет такого типа данных, как массив. Но это ограничение обходится благодаря тому, что можно использовать предопределенный объект массива – Array. Для создания объекта-массива можно использовать один из следующих вариантов синтаксиса:

    ИмяМассива = new Array(элемент1, элемент2, ... элементN) ИмяМассива = new Array(ДлинаМассива)

    В первом случае перечисляются все составляющие массива, во втором – просто указывается количество элементов. Допускается также использование литералов при объявлении массива:

    Computers = ["PC", "Mac", "Sun"];

    Для заполнения элементов массива значениями, как и вообще для обращения к элементам массива, можно использовать индекс элемента. При этом следует учитывать, что индекс элементов массива начинается с нуля:

    Var colors = new Array(3); colors = "Красный"; colors = "Синий"; colors = "Зеленый";

    Довольно часто бывает удобно использовать предоставляемою языком JavaScript возможность заполнения массива непосредственно при его объявлении:

    Var colors = new Array("Красный","Синий","Зеленый");

    Чтобы узнать длину массива (количество элементов, из которых состоит массив), следует использовать свойство length:

    Var NumColors = colors.length;

    Помимо свойства length, в JavaScript предусмотрен также целый ряд других свойств и методов для работы с массивами. В частности, к числу свойств объекта Array, помимо length, относятся универсальные для всех объектов constructor и prototype, а так же предназначенные для использования массивов совместно с регулярными выражениями свойства index и input.

    Что касается методов, то помимо стандартных toSource, toString и valueOf, массивы наделены еще десятком собственных, перечисленных в таблице 4.11.

    Таблица 4.11. Методы объекта Array Метод Описание
    concat Объединяет два массива, и возвращает новый
    join Объединяет все элементы массива в одну строку
    pop Удаляет последний элемент из массива, и возвращает его
    push Добавляет один или более элементов в конец массива и возвращает его новую длину
    reverse Перемещает элементы массива таким образом, что первый становится последним, и наоборот
    shift Удаляет первый элемент массива и возвращает его
    slice Удаляет часть элементов массива, и возвращает новый массив
    splice Добавляет и (или) удаляет элемент из массива
    sort Сортирует элементы массива по алфавиту
    unshift Добавляет один или более элементов в начало массива, и возвращает новую длину массива (в MSIE 5.5 и 6 этот метод ничего не возвращает)

    Рассмотрим некоторые методы подробнее. Так, используя метод concat можно объединить 2 массива в одном:

    Var a = new Array("A1", "A2"); var b = new Array("B1", "B2"); var ab = a.concat(b);

    Здесь переменная ab станет массивом, содержащим все 4 элемента двух склеиваемых массивов. Если теперь к такому массиву применить метод join, то результатом будет строка, содержащая все элементы этого массива, перечисленные через запятую:

    Str = ab.join(); // получим str = "A1,A2,B1,B2"

    Что касается метода pop, то применив его к этому же массиву, мы получим в «B2» качестве ответа, а массив будет урезан до трех первых значений. А метод shift, наоборот, возвращает первый элемент (в нашем случае – «A1») и делает то же самое с массивом с той лишь разницей, что оставшиеся элементы сдвигаются вперед.

    Чтобы лучше понять, как работают эти и другие методы с массивами, обратимся к следующему примеру, приведенному в листинге 4.3.

    Листинг 4.3. Работа с массивами

    Этот же пример можно посмотреть в файле array.html, заодно можно будет просмотреть все результаты его работы в браузере (см. рис. 4.7).

    Рис. 4.7. Результат применения метода splice: возвращаемый массив и изменения

    Массивы также могут быть многомерными, т.е. элементом массива может быть другой массив. В таком случае для обращения к элементу массива используют следующий синтаксис:

    Array2D="Элемент 0,0" Array2D="Элемент 0,1" ... Array2D[N][N]="Элемент N,N"

    Пример заполнения и вывода двумерного массива можно найти в файле arrays.html, там же находится и интерактивный пример практически для всех методов массива.

    Объект Boolean

    Объект Boolean – оболочка для одноименного типа данных. Для определения объекта типа Boolean используется следующий синтаксис:

    BooleanObj = new Boolean(значение)

    Здесь значение – инициализирующее выражение, которое, в случае необходимости, будет приведено к true или false. Если вы укажете такое значение, как 0, null, false, NaN, undefined, или пустую строку, то результатом инициализации объекта типа Boolean будет false, а в случае любого другого значения – true.

    Не следует путать примитивные логические значения true и false с типами данных true и false объекта Boolean. Например, если объявить переменную x и присвоить ей значение объекта Boolean, инициализированного при помощи значения false, она все равно при сравнении будет представлять собой значение истины (true):

    X = new Boolean(false); // при сравнении if (x) получим true

    В то же время, если просто присвоить переменной примитивный тип данных false, то она именно его и получит:

    X = false; // при сравнении if (x) получим false

    Что касается применения этого объекта, на практике, то его можно использовать, в качестве функции для того, чтобы преобразовывать значения любых других типов в булевские:

    A = 100; x = Boolean(a); // x получит true if (x) {...}

    Но, на самом деле, вряд ли вы это будете делать, поскольку при необходимости подобные преобразования производятся интерпретатором JavaScript автоматически – в примере выше можно было бы сразу написать «if(a)…», а необходимое в данном случае преобразование будет сделано в любом случае.

    Объект Date

    Для работы с датами в языке JavaScript не предусмотрено специального типа данных, однако, как и в случае с массивами, имеется специальный объект Data. Для создания объекта даты можно воспользоваться любым из следующих способов:

    New Date() new Date(Миллисекунды) new Date("Дата_в_виде_строки")

    В первом случае создается объект Date с текущим временем, во втором – следует указать количество миллисекунд, прошедших с 1 января 1970 года. Если указывается дата в виде строки, то она должна быть вида «Feb 28, 2005». Допустимо также задать дату, используя целочисленные значения для года, месяца, дня и т.п.:

    New Date(Год, Месяц, День [, Час, Минута, Секунда, Миллисекунда])

    Разумеется, в этом случае можно избегать указывания секунд и миллисекунд, тем более что миллисекунды даже не поддерживались в старых версиях браузеров. Кроме того, в JavaScript до версии 1.3 не поддерживаются даты ранее 1 января 1970 года. Что касается формата значений, которые указывают в строке, то год – это любое 4-значное число (если указать 2-значное, то к нему добавится 1900), месяц число – от 0 (январь) до 11 (декабрь), а день – от 0 до 31. Соответственно, значения времени так же ограничены: для часов это будет целое от 0 до 23, для секунд и минут – от 0 до 59, а для миллисекунд – от 0 до 999. Таким образом, чтобы в качестве значения объекта типа Date указать 9 мая 2005 года, следует написать:

    Var anyday = new Date (2005, 5, 9);

    А если нужно получить текущее значение даты и времени, то никаких параметров не требуется вовсе:

    Var now = new Date();

    Начиная с JavaScript 1.3, диапазон дат может находиться в пределах 100 миллионов дней до и после 01.01.1970 (в сумме это почти 550 тысяч лет!). В этой же версии появилось требование всегда указывать год в четырехзначном формате, во избежание ошибок, связанных со сменой столетий.

    Для работы с объектом Date предусмотрено 2 свойства – constructor и prototype, а так же множество методов, позволяющих выделять нужную часть даты (год, месяц, число, время), выводить ее в том или ином формате и т.д. Все они перечислены в таблице 4.12.

    Таблица 4.12. Методы объекта Date Метод и его синтаксис Описание
    getDate() Возвращает день месяца в локальном времени
    getDay() Возвращает день недели в локальном времени
    getFullYear() Возвращает год в локальном времени
    getHours() Возвращает текущее время (часы) в локальном времени
    getMilliseconds() Возвращает текущее время (миллисекунды) в локальном времени
    getMinutes() Возвращает текущее время (минуты) в локальном времени
    getMonth() Возвращает текущее время (месяц) в локальном времени
    getSeconds() Возвращает текущее время (секунды) в локальном времени
    getTime() Возвращает текущее время в виде количества в локальном времени
    getTimezoneOffset () Возвращает смещение времени в минутах относительно времени по Гринвичу в локальном времени
    getUTCDate() Возвращает день месяца в универсальном времени
    getUTCDay() Возвращает день недели в универсальном времени
    getUTCFullYear() Возвращает год в универсальном времени
    getUTCHours() Возвращает текущее время (часы) в универсальном времени
    getUTCMilliseconds() Возвращает текущее время (миллисекунды) в универсальном времени
    getUTCMinutes() Возвращает текущее время (минуты) в универсальном времени
    getUTCMonth() Возвращает текущее время (месяц) в универсальном времени
    getUTCSeconds() Возвращает текущее время (секунды) в универсальном времени
    getYear() Устаревший. Возвращает год в коротком (двухзначном) формате в универсальном времени
    parse(строка_даты) Возвращает количество миллисекунд, прошедших с 1 января 1970 года до значения, указанного в параметре, в локальном времени
    setDate(день) Устанавливает день месяца в локальном времени
    setFullYear(год) Устанавливает год в локальном времени
    setHours(часы) Устанавливает время (часы) в локальном времени
    setMilliseconds (миллисекунды) Устанавливает время (миллисекунды) в локальном времени
    setMinutes(минуты) Устанавливает время (минуты) в локальном времени
    setMonth(месяц) Устанавливает время (месяц) в локальном времени
    setSeconds (секунды) Устанавливает время (секунды) в локальном времени
    setTime (миллисекунды) Устанавливает время в миллисекундах для определенной даты в локальном времени
    setUTCDate(день) Устанавливает день месяца в универсальном времени
    setUTCFullYear (год) Устанавливает год в универсальном времени
    setUTCHours(часы) Устанавливает время (часы) в универсальном времени
    SetUTCMilliseconds(миллисекунды) Устанавливает время (миллисекунды) в универсальном времени
    setUTCMinutes (минуты) Устанавливает время (минуты) в универсальном времени
    setUTCMonth(месяц) Устанавливает время (месяц) в универсальном времени
    setUTCSeconds (секунды) Устанавливает время (секунды) в универсальном времени
    setYear(год) Устаревший. Устанавливает год в локальном времени, в качестве значения года допустим двузначный формат
    toGMTString() Устаревший. Преобразует дату в строку, соответствующую времени по Гринвичу
    toLocaleString() Возвращает дату и время в виде строки, соответствующей по формату установкам локальной системы
    toLocaleDateString() Возвращает дату в виде строки, соответствующей по формату установкам локальной системы
    toLocaleTimeString() Возвращает время в виде строки, соответствующей по формату установкам локальной системы
    toSource() Возвращает объект даты в представлении литерала
    toString() Возвращает объект даты в представлении строки
    toUTCString() Преобразует дату в строку в формате, соответствующему универсальному времени
    UTC(параметры) Возвращает количество миллисекунд, прошедших с 1 января 1970 года в универсальном времени. В качестве параметров указывают год, месяц и день, а также (опционально) – часы, минуты, секунды и миллисекунды
    valueOf() Возвращает дату в виде примитивного значения

    Несмотря на такое обилие методов, работать с объектом Date достаточно просто: следует только понять принцип наименования методов:

    • методы, начинающиеся с «set», предназначены для установки даты и времени в объектах Date;
    • методы, начинающиеся с «get», предназначены для извлечения даты, времени или их частей из объектов Date;
    • методы, начинающиеся с «to», возвращают дату и время (или их части) в виде строковых значений;
    • методы, содержащие «UTC», отличаются от аналогичных только тем, что работают с форматом универсального времени (т.е. отображает время по Гринвичу, с учетом смещения относительно текущего часового пояса).

    Таким образом, остается только добавлять к get или set название необходимой части даты или времени, чтобы получить или установить нужный параметр, при необходимости используя еще и UTC. Ну а когда требуется получить результат в «человеческом» виде, используют методы to. Так же следует запомнить, что для работы с годом надо всегда использовать только полноформатные функции (т.е. getFullYear или getUTCFullYear, а не getYear).

    Строковое представление даты в JavaScript имеет следующий формат:

    ДеньНедели Месяц Число Год Часы:Минуты:Секунды GMT±Смещение

    Чтобы наглядно увидеть представление дат, а заодно и рассмотреть, как это работают функции вроде toString, рассмотрим то, что все они возвращают на вывод. При этом первое, что может прийти на ум для просмотра работы той или иной функции – это использовать вывод текста в документ:

    Document.writeln(DateObject.toString()); document.writeln(DateObject.toGMTString()); // и т.д.

    Но, на самом деле, поскольку функций много, было бы хорошо предварительно писать, что за действие было выполнено:

    Document.writeln("DateObject.toString()" + DateObject.toString());

    А теперь вновь подумаем о том, сколько же строк мы хотим вывести таким способом на самом деле. Даже если учитывать возможности метода «скопируй и вставь», поддерживаемого всеми текстовыми редакторами, это не застрахует от ошибок, подобных такой:

    Document.writeln("DateObject.toLocaleString()" + DateObject.toString());

    Но, как гласит девиз IBM, люди должны думать, а машины – работать. Так что подумаем, как заставить работать компьютер, заодно избавив себя от необходимости вводить лишние байты кода, для чего обратимся к листингу 4.4.

    Листинг 4.4. Вывод разных типов дат и функция eval

    Методы объекта Date

    Прежде всего, в нем определена функция printDate, которая, собственно и выводит в документ дату в том или ином виде. Вернее, она выводит дату в нашем случае, но в принципе она может выводить все, что угодно – главное, чтобы принимаемый ею аргумент был законченным фрагментом кода JavaScript. При этом сначала код выводится как есть (т.е. печатается строковая переменная в исходном виде), а затем выводится результат выполнения, для чего используется функция eval. В результате, написав один раз такую функцию, можно в дальнейшем по ходу всего документа обращаться к ней, избавив себя от необходимости дважды вводить практически один и тот же текст.

    Вслед за функцией вывода расположено создание объекта типа Date, которому присваивается значение 2005 год, 3 месяц (апрель, т.к. январь – нулевой), 1 число, 14 часов, 30 минут, 45 секунд. Далее открывается на запись документ и последовательно вызывается функция printDate для 6 различных методов объекта Date. Результатом работы данного сценария будет 6 строк, содержащих пары значений из метода и результата его работы, разделенных двоеточием (рис. 4.8).

    Рис. 4.8. Вывод одной и той же дата различными методами

    Следует отметить, что метод toSource, выводящий дату во внутреннем представлении программы, поддерживается только Mozilla-браузерами. Кроме того, формат вывода дат всеми остальными методами так же может несколько различаться в разных браузерах. Вы можете загрузить такой пример в различные программы просмотра и самостоятельно посмотреть, что они выдадут (файл date.html).

    Объект Function

    Предопределенный объект Function определяет строку кода на JavaScript, которая должна быть исполнена, как функция. Для объявления объекта Function используется следующий синтаксис:

    ИмяФункции = new Function([аргумент1, аргумент2, ...аргументN], ТелоФункции)

    В данном случае в качестве имени функции может быть использовано имя любой переменной, или свойство уже существующего объекта. Также возможно указывать объект типа Function в качестве значения для обработчика событий объекта. Допустим, если мы хотим сделать собственный обработчик события типа «завершение загрузки документа» (document.onload), то можем написать так:

    Document.onload = new Function([Аргумент1, ...аргументN], ТелоФункции);

    Аргументы в данном случае – это параметры, передаваемые функции, ну а тело функции – собственно код, который должен быть выполнен при обращении к данному объекту-функции. Например, можно написать такой вариант объекта, который будет использоваться для возведения числа в квадрат:

    Var SquareObj = new Function("x", "return x*x");

    Здесь SquareObj – имя переменной, x – принимаемый аргумент, а «return x*x» – тело функции. Обратите внимание на тот факт, что не только тело функции, но и принимаемые ей аргументы заключены в кавычки, а также и на то, что имя типа объекта, как это принято в JavaScript, пишется с большой буквы (Function).

    Использование созданных таким способом переменных аналогично использованию переменных любых других типов:

    Var a = 5 + SquareObj(2); // получим 9

    Фактически, объект типа Function всегда можно представить и в виде обычной функции, объявленной при помощи ключевого слова function. Так, то же возведение во вторую степень можно описать так:

    Function SquareFunc(x) { return x*x; }

    Соответственно, и использовать объявленную таким методом функцию (в данном случае – именно функцию в «чистом» виде, а не процедуру), можно аналогичным способом:

    Var a = 5 + SquareFunc(2); // тоже получим 9

    Таким образом, присвоение переменной значения в виде функции с использованием объекта Function является аналогичным объявлению функции как таковой. Но при этом у этих подходов имеется и отличие: если SquareObj – это переменная, значение которой является ссылкой на объект, созданный при помощи объекта Function, то SquareFunc – это имя функции. Соответственно, при исполнении программы они ведут себя тоже по-разному: для объекта типа функция интерпретатор всякий раз, когда ему попадется переменная (в нашем случае – SquareObj) будет полностью оценивать весь код функции, а для объявленных обычным способом функций код оценивается лишь при первом проходе. Это отличие может быть непринципиальным, если функция выполняет разовую работу, однако использование переменных, созданных на основе объекта Function, существенно снижает эффективность работы программы в циклах. Поэтому на практике использование объектов-функций – большая редкость, но, тем не менее, иногда они могут быть удобны, например, для добавления методов другим объектам.

    Объект Function имеет стандартные для JavaScript свойства constructor и prototype, а так же ряд собственных:

    Arguments – массив, соответствующий параметрам функции arguments.callee – соответствует телу функции. arguments.caller (устаревшее) – указывает на имя функции, из которой произошло обращение к объекту; arguments.length – указывает на число параметров функции. length – указывает на количество аргументов, ожидаемых функцией (а не на поступившее их число, как в случае с argument.length);

    ВНИМАНИЕ
    Все свойства arguments могут быть видны только «изнутри» функции, причем, начиная с JavaScript 1.4, arguments более не является свойством объекта Function, а является самостоятельной локальной переменной, неявно присутствующей в любой функции. Фактически, для Function остается всего 1 собственное свойство – length.

    Кроме свойств, у объекта Function имеется несколько методов. Так, метод apply позволяет применить метод одного объекта к другому, а метод call – вызывать метод иного объекта в контексте текущего. К сожалению, реализация этих методов на практике явно оставляет желать лучшего. Так что остается лишь упомянуть про стандартные для JavaScript методы toString, toSource и valueOf, имеющиеся так же и у объекта Function.

    Объект Math

    Math – встроенный объект языка JavaScript, имеющий в качестве методов и свойств основные математические константы и функции. Например, свойство PI объекта Math содержит значение числа Пи (π), что приблизительно равно 3,1416, а метод sin возвращает синус указанного числа.

    Кроме числа π, объект Math имеет следующие свойства:

    • E – основа натуральных логарифмов (приблизительно 2,718)
    • LN10 – натуральный логарифм 10 (приблизительно 2,302)
    • LN2 – натуральный логарифм 2 (приблизительно 0,693)
    • LOG10E – десятичный логарифм E (приблизительно 0,434)
    • LOG2E – двоичный логарифм E (приблизительно 1,442)
    • SQRT1_2 – квадратный корень из 0,5 (приблизительно 0,707)
    • SQRT2 – квадратный корень из 2 (приблизительно 1,414)

    Поскольку все свойства объекта Math являются предопределенными константами, то создавать другие объекты типа Math не только не требуется, но и недопустимо, а обращаться к ним надо всегда одним и тем же способом, например:

    Var CircleLength = diameter * Math.PI;

    Помимо свойств, для объекта Math определены также методы, соответствующие основным математическим функциям. Все они перечислены в таблице 4.13.

    Таблица 4.13. Математические методы JavaScript Метод и его синтаксис Описание
    abs(число) Возвращает абсолютное значение аргумента
    atan2(y, x) Возвращает число в диапазоне от -? до?, представляющее угол (в радианах) между осью X и точкой (x,y). Обратите внимание, что первым аргументом является Y-координата
    exp(число) Возвращает E в указанной степени (экспонентный логарифм)
    ceil(число), floor(число) Возвращает значение, являющееся ближайшим большим (ceil) или меньшим (floor) целым числом
    min(число1, число2), max(число1, число2) Возвращают меньшее (min) или большее (max) число из двух сравниваемых аргументов
    sin(число),cos(число), tan(число),asin(число), acos(число),atan(число) Возвращают результат выполнения стандартных тригонометрических функций – синуса, косинуса, тангенса, арксинуса, арккосинуса и арктангенса
    pow(база, экспонента) Возвращает базу в степени экспоненты
    random() Возвращает псевдослучайное число от 0 до 1
    round(число) Возвращает значение, округленное до ближайшего целого
    sqrt(число) Возвращает квадратный корень числа

    Как и в случае со свойствами, для использования методов объекта Math следует ссылаться непосредственно на сам объект, а не на его копии. Для примера напишем функцию, которая будет возвращать диаметр исходя их площади круга:

    Function CircleDiam(Square) { Radius = Math.sqrt(Square / Math.PI) ; }

    Чтобы воспользоваться ею на практике, можно прибегнуть к помощи методов prompt и alert:

    Var sq = prompt("Введите площадь",1); var di = CircleDiam(sq); alert("Диаметр окружности: "+di);

    Работу этих и других методов объекта Math можно посмотреть в файле math.html.

    Объект Number

    Объект Number является объектным представлением простых числовых типов. Он имеет специальные свойства для числовых констант, – таких, как «максимальное число», «не число» и «бесконечность». Для создания нового объекта типа Number используют следующий синтаксис:

    New Number(Значение)

    На практике использование объекта Number чаще всего сводится к использованию его констант при проверке аргументов на допустимость и отслеживания ошибок времени выполнения. Например, чтобы проверить, является значение переменной числом или нет, можно использовать такой способ:

    If (x!=Number.NaN);

    В данном случае условие будет истинным, если переменная x содержит число, поскольку она сравнивается со специальным значением – NaN, означающим «не число». Помимо NaN, можно использовать и другие специальные значения – все они являются свойствами объекта Number:

    • MAX_VALUE – максимальное возможное число
    • MIN_VALUE – минимальное возможное число
    • NaN – не число (Not a Number)
    • NEGATIVE_INFINITY – «отрицательная бесконечность», специальное значение, возвращаемое в случае переполнения
    • POSITIVE_INFINITY – «положительная бесконечность», специальное значение, возвращаемое в случае переполнения

    Все эти свойства являются константами, поэтому для их использования создавать новый объект типа Number не требуется. Помимо вышеперечисленных свойств, для Number определены так же стандартные свойства constructor и prototype

    Кроме свойств, объект Number, разумеется, имеет и методы. Помимо стандартных методов toSource, toString и valueOf, в JavaScript 1.5 появились 3 новых собственных метода объекта Number – toExponential, toFixed и toPrecision. Все они предназначены для преобразования чисел в строки на основе того или иного формата. Так, метод toExponential преобразует число в строку в виде числа с экспонентой, метод toFixed – в строку, содержащую число с фиксированным количеством знаков после запятой, а метод toPrecision использует один из этих способов, в зависимости от числа и выделенного количества знаков.

    Исследуем с эти методы подробнее, для чего рассмотрим их синтаксис:

    Метод([ЧислоЗнаков])

    Очевидно, что для всех методов число знаков обозначает число знаков после запятой, однако если для метода toFixed значением по умолчанию (т.е. если ничего не указано) будет 0, то для toExponential и toPrecision – количество знаков, необходимое для вывода числа полностью. Чтобы лучше разобраться с работой и отличиями всех этих методов, рассмотрим их на примере листинга 4.5:

    Листинг 4.5. Методы toExponential, toFixed и toPrecision

    Методы объекта Number

    Здесь мы вновь (как и в листинге 4.4) воспользовались функцией, выводящей сначала выражение, а затем – результат его интерпретации, только назвали ее в данном случае printNumber. Далее следует собственно объявление переменной, над которой будут производиться вычисления. В данном случае мы объявили ее как объект типа Number, хотя, на самом деле, можно было бы ограничиться и простым объявлением переменной (x = 12.45678). Наконец, документ открывается для записи и в него сначала выводится значение переменной x без каких-либо явных преобразований (но мы уже знаем, что на самом деле тут автоматически применяется метод toString()), после чего все три исследуемых метода вызываются сначала без указания числа знаков, а затем – с параметрами 2 и 4. Результатом работы этого сценария будет 10 строк, содержащих пары «выражение: результат обработки» (рис. 4.9).

    Рис. 4.9.

    В заключение остается еще раз отметить, что данные методы появились лишь в JavaScript 1.5 и, соответственно, не работают в браузерах Netscape 4, MSIE 4/5 и Opera до версии 7.0. В то же время, они обеспечивают более гибкие возможности форматирования чисел при выводе, чем, скажем, метод round() объекта Math.

    2011-08-01 // Есть вопросы, предложения, замечания? Вы можете