Содержание:
JavaScript объекты
- встроенные объекты
- объекты браузера
- объекты, которые программист создает самостоятельно (пользовательские)
Встроенные объекты — это предопределенные объекты number
, string
, array
… Большинство из которых уже были рассмотрены в предыдущих уроках.
Об объектах браузера в javaScript речь пойдет в дальнейших уроках.
А сейчас время познакомиться с пользовательскими объектами в javaScript.
- Object(объекты)
- Number (обработка чисел)
- String (обработка строк)
- Array (массивы)
- Math (математические формулы, функции и константы)
- Date (работа с датами и временем)
- RegExp
- Global (его свойства Infinity, NaN, undefined)
- Function
JavaScript создание объектов
- Использование инициализатора объекта (или создание объектов-коллекций)
- Использование конструктора объектов (создание классов-конструкторов)
- Создание объектов-коллекций
- Создание классов-конструкторов
// пустой объект: let имя_объекта = {}; // объект со свойствами: let имя_объекта = {свойство:значение, свойство:значение,...};
или
let имя_объекта = new Object(); имя_объекта.свойство = значение;// точечная нотация имя_объекта["свойство"] = значение;// скобочная нотация
myBrowser
со свойствами name
(значение “Microsoft Internet Explorer”) и version
(значение «9.0»)✍ Решение 1:
1 2 3 4 5 6 | let myBrowser = { name: "Microsoft Internet Explorer", // свойство name version: "9.0" // свойство version равно значению "9.0" }; alert(myBrowser.name); // вывод значения свойства name alert(myBrowser.version); |
или
✍ Решение 2:
1 2 3 | let myBrowser = new Object(); // или let myBrowser = {}; myBrowser.name= "Microsoft Internet Explorer"; // точечная нотация myBrowser["version"]= "9.0"; // скобочная нотация |
car
и moto
) со свойствами color
и brand
(у объекта moto
еще свойство horse power
). Вывести значение свойства color у объекта car и свойства brand у объекта moto.✍ Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | let car = new Object(); car.color = "Белый"; car.maxSpeed=220; car.brand = "Nissan"; document.write("У машины цвет: " + car.color); let moto = { color: "Синий", "horse power": 130, // если свойство из двух слов - используем кавычки brand: "Yamaha" }; document.write("У мотоцикла производитель: " + moto.brand); |
Изменение и удаление свойства объекта
moto["horse power"] = 120; //если два слова, то только скобочная нотация alert (moto["horse power"]); // 120 delete moto["horse power"]; // удаляем свойство |
С помощью квадратных скобок также также можно обратиться к свойству, вместо имени которого может быть переменная. Например:
let moto = { color: "Синий", "horse power": 130, // если свойство из двух слов - используем кавычки brand: "Yamaha" }; let key = prompt("Что вы хотите узнать о мотоцикле? ", "brand или color?"); // доступ к свойству через переменную alert( moto[key] ); // Yamaha (если ввели "brand") |
for in
при работе с объектами в javascriptСовсем немного об этой конструкции уже было сказано в одном из предыдущих уроков.
Цикл for in
в javascript предназначен для прохода по массивам, коллекциям и объектам.
Рассмотрим пример использования for in
:
1 2 3 4 5 6 7 8 | let myBrowser = new Object(); myBrowser.name= "Microsoft Internet Explorer"; myBrowser["version"]= "9.0"; for (let a in myBrowser) { alert(a); // Перебирает свойства объекта myBrowser. Выдаст name, version alert(myBrowser[a]); // Выдаст значения свойств } |
Для полноценной работы с объектами необходимо создать класс-конструктор:
- сначала создается класс с помощью конструктора;
- затем создается новый объект на основе конструктора.
Создание класса объектов с помощью конструктора (создание классов-конструкторов):
1 2 3 4 function Имя_класса_объектов(св-во1, св-во2){ this.свойство1 = св-во1; // значение для свойства1 берется из значения аргумента св-во1 this.свойство2 = св-во2; }
Создание нового объекта на основе конструктора для класса объектов:
1 let имя_объекта = new имя_класса("значение_св-ва1","значение_св-ва2");или
1 2 3 let имя_объекта =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; } let myBrowser = new Browser("Microsoft Internet Explorer","9.0"); alert(myBrowser.name); alert(myBrowser.version); |
Итак, сравним еще раз с первым способом создания объектов:
1 2 3 4 5 6 | // объект-коллекция let myBrowser = {name: "Microsoft Internet Explorer", version: "7.0"}; alert(myBrowser.name); alert(myBrowser.version); // следующая строка недопустима! let myBrowser1 = new myBrowser ("MozillaFirefox","3.5"); // НЕ ВЕРНО! !! |
Сотрудник
, который содержит сведения о сотрудниках некоторой фирмы, такие как Имя
, Отдел
, Телефон
, Зарплата
(использовать функцию-конструктор и ключевое слово this
). Создать экземпляр объектаДоступ к свойствам объектов в javaScript
имя_объекта.
имя_свойства
1 2 | 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"; // свойство по умолчанию! } let 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(biology, phisics) { this.biology=biology; this.phisics=phisics; } let ivanov = new Student();
ivanov.biology = "отлично";
Добавление свойств к классу объектов:
имя_класса
.prototype.
имя_свойства=
значение
Student.prototype.biology = "отлично";
prototype
; прототип — объект, определяющий структуру1 2 | Student.prototype.email="jb@gmail.com"; alert(ivanov.email); // выдаст "jb@gmail.com" |
1 2 3 4 5 6 7 8 9 | let summerTour={ turkey : 2000, spain : 3000, egypt : 1000 }; let option; for (option in summerTour){ document.write(option + ':' + summerTour[option] + '<br/>'); } |
Javascript прототипы (введение)
Рассмотрим пример того, как строятся javascript классы на прототипах
Cаr
(автомобиль) с тремя свойствами : name
(название), model
(модель), color
(цвет). Создать экземпляр класса с конкретными значениями свойств. Затем через созданный экземпляр добавить к классу свойство owner
(владелец) с конкретным значением по умолчанию (Иванов). Вывести все значения свойств созданного экземпляра1 2 3 4 5 6 7 8 9 10 11 12 13 | function Car(name, model, color) { /* конструктор объекта car*/ this.name = name; this.model = model; this.color = color; } let myCar=new Car; myCar.name="Мерс"; myCar.model="600"; myCar.color="green"; Car.prototype.owner = "Иванов"; /* добавляем новое свойство*/ alert(myCar.name+" "+myCar.model+" "+myCar.color+" "+myCar.owner); |
Сотрудник
добавьте новое свойство адрес
к классу объектов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; } let myBrowser=new Browser("Microsoft Internet Explorer",8.0); myBrowser.aboutBrowser(); |
1 2 3 4 5 6 7 8 9 | function Browser(name, version) { this.name = name; this.version = version; this.aboutBrowser = function(){ document.write("Обозреватель: " + name + " " + version); } } let myBrowser=new Browser("Microsoft Internet Explorer",8.0); myBrowser.aboutBrowser(); |
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('<span style="color:' + this.color + '">'); document.write(this.toString()); document.write('</span>'); } // используем измененный класс let s = new String("Это строка"); s.color = "red"; s.write(); |
String
добавить метод printMe()
, который выводит слово «Ура!» как заголовок (тег h…
), указанного пользователем уровня (prompt
).Уровень заголовка (1, 2 … 6) можно добавить в виде свойства класса
String
.Вспомним, как должны выглядеть теги заголовков в HTML:
<h1>Заголовок</h1> <h2>...</h2> ... |
Дополните код:
1 2 3 4 5 6 7 8 | String.prototype.uroven="1"; ... function printZagolovok (){ ... ... } let s=new ...; ... |
Резюме: сравним еще раз два варианта использования пользовательских объектов в JavaScript:
- Создание объектов-коллекций
- Создание классов-конструкторов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | let myBook=new Object(); myBook.title="книга"; myBook.price="200"; alert(myBook["title"]); // 1-й вариант обращения к свойствам alert(meBook.price); // 2-й вариант обращения к свойствам function myBookShow() { for (let i in myBook) { document.write(i+": "+myBook[i]+"<br>"); // Перебор свойств } } 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); } } let book = new myBook("Книга", 200); book.show(); |
Сотрудник
, который содержит сведения о сотруднике некоторой фирмы, такие как Имя
, Отдел
, Телефон
, Зарплата
и отображает данные об этом сотруднике (создать метод объекта для отображения данных)- Определить класс
MenuItem
. - Определить свойства:
title
(название пункта меню или текст гиперссылки),url
(значение атрибута href для гиперссылки), методshow
(вывод на экран созданного меню). - Добавить 4 пункта меню в виде списка (тег
li
)
Вспомним код html для создания пунктов меню:
<li><а href="labs-org.ru">Перейти на главную страницу</а></li> <li> ... </li> <li> ... </li> |
*Сложное: количество пунктов меню, их названия и url необходимо запрашивать у пользователя
Совет: для вывода в методе show()
строки на экран воспользуйтесь методом document.write()
Рассмотрим использование объекта Navigator
в javaScript на примере:
- название браузера
- язык браузера
- название ОС
- включены ли куки
- подключен ли пользователь к интернету
- разрешение экрана
- глубину цвета
- адрес загруженной страницы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | let option; // вывод всех свойств объекта navigator for (option in navigator){ document.write(option + ' : ' + navigator[option]+ ' <br />'); } // функция выовда конкретных свойств объекта navigator function userDetails (){ document.write("<br><br>Название браузера: " + navigator.userAgent + "<br />"); document.write("Язык браузера: " + navigator.language + "<br />"); document.write("Название ОС: " + navigator.oscpu + "<br />"); document.write("Включены ли куки: " + navigator.cookieEnabled + "<br />"); document.write("Подключен ли Интернет: " + navigator.nLine + "<br />"); } userDetails(); |
Объект javaScript Screen
Рассмотрим использование объекта Screen
в javaScript на примере:
1 2 3 4 5 | function userDetails (){ document.write("Разрешение: " + screen.width + " x " + screen.height + "<br />"); document.write("Глубина цвета: " + screen.colorDepth + " x " + screen.height + "<br />"); } userDetails(); |
Объект javaScript Location
Рассмотрим использование объекта Location
в javaScript на примере:
1 2 3 4 | function userDetails (){ document.write("Адрес загруженной страницы: " + location.href + "<br />"); } userDetails(); |
- С помощью выражений с ключевым словом
new
вы можете создавать экземпляры объектов, то есть их конкретные воплощения. - Более того, благодаря свойству javascript
prototype
имеется возможность добавлять к объектам новые свойства и методы, придуманные пользователем и отсутствовавшие в исходных встроенных объектах. - Создание объектов можно использовать для создания баз данных.
Замкнутые функции (IIFE) при работе с объектами
IIFE (Immediately Invoked Function Expression) — такая функция выполнится сразу после ее определения.
(function () { операторы })();
Состоит из двух частей. Первая часть — это непосредственно сама анонимная функции:
(function () {
операторы
})();
Переменные IIFE замыкаются в пределах области функции, и глобальная область видимости ими не засоряется.
Вторая часть:
(function () {
операторы
})();
Эта часть создает мгновенно выполняющееся функциональное выражение ()
, благодаря которому функция выполняется напрямую.
Рассмотрим использование так называемых замкнутых функций при работе с объектом на конкретном примере.
index.html
) и подключить к нему два файла со скриптами (script1.js
и script2.js
).
1. В первом файле со скриптом создать замкнутую функцию, выводящую в консоль фразу ‘Привет, Иван‘. Для этого:
IvanGreeter
.name
со значением ‘Иван‘.sayHello
, выводящий в консоль сообщение ‘Привет, Иван‘.
2. Во втором файле со скриптом создать замкнутую функцию, выводящую в консоль фразу ‘Здравствуйте, Мария‘.
MarieGreeter
и добавить аналогичные свойства и методы для вывода сообщения ‘Здравствуйте, Мария‘.
3. Откройте в браузере консоль (браузер Chrome -> F12) и посмотрите на результат во вкладке Console.
✍ Решение:
-
код index.html:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Замкнутые функции</title> <script src="script1.js"></script> <script src="script2.js"></script> <script> IvanGreeter.sayHello(); MarieGreeter.sayHello(); </script> </head> <body> <h1>Замкнутые функции</h1> </body> </html> |
код script1.js:
(function (window){ // замкнутая функция let IvanGreeter = {}; // создание пустого объекта IvanGreeter.name = "Иван"; // свойство let greeting = "Привет, "; IvanGreeter.sayHello = function () { // метод console.log(greeting + " " + IvanGreeter.name); } window.IvanGreeter = IvanGreeter; })(window); |
код script2.js:
(function (window){ let MarieGreeter = {}; MarieGreeter.name = "Мария"; let greeting = "Здравствуйте, "; MarieGreeter.sayHello = function () { console.log(greeting + " " + MarieGreeter.name); } window.MarieGreeter = MarieGreeter; })(window); |
name
!» или «Пока, name
!» в зависимости от того, с какой буквы начинается имя. Если имя начинается с буквы «и» или «И», то выводить «Пока, name
!», в остальных случаях — «Привет, name
!».Для выполнения необходимо скачать четыре файла, три из которых — файлы со скриптами и четвертый — главный запускаемый файл (скачать файлы: правой кнопкой мыши — Сохранить ссылку как…). В каждом из файлов предоставлены подробные комментарии по выполнению общей программы. Следуйте комментариям и выполняйте каждый пункт последовательно.
index.html,
Hello.js,
GoodBye.js,
script.js
Здравствуйте
Спасибо за обучение, хорошие уроки!
Не поняла, создание методов объекта. Там два вида:
1 Методы объекта создаются на основе функции и добавляются в конструктор класса
2 Методы объекта создаются на основе функции и добавляются в конструктор класса
они отличаются, а название одно? Зачем тогда 1 и 2? Или второй называется иначе?
Спасибо! Это ошибка была, исправила. Конечно, они отличаются. Рассмотрите подробно примеры
«myObg.rost = 2 // НЕЛЬЗЯ!»
Вы уверены?
уже можно. спасибо! исправлено