Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions Lesson_3/1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Homework</title>
</head>

<body>
<!--
Обязательное задание.

Необходимо данное задание выполнить в es5 стиле и в es6 стиле.
Необходимо создать функцию-конструктор/класс для продукта.
Названия: `ProductES5` для es5 стиля, `ProductES6` для es6 стиля.
При создании объекта от функции-конструктора/класса необходимо передавать имя
и цену товара, эта информация должна быть сохранена в объекте.
Также у объекта должна быть возможность выполнить метод `make25Discount`, данный
метод должен уменьшать стоимость продукта на 25%.
Необходимо продемонстрировать работу с объектом (в свободной форме).
-->
<script>
"use strict";

// ES5
function ProductES5(name, price) {
this.name = name;
this.price = price;
this.cheker = false;
}
ProductES5.prototype.make25Discount = function () {
if (this.cheker) {
console.log('Скидка уже активна')
} else {
this.price *= 0.75;
this.cheker = true;
console.log('Цена изменилась с учетом скидки');
}
}

// ES6
class ProductES6 {
constructor(name, price) {
this.name = name;
this.price = price;
this.cheker = false;
}
make25Discount() {
if (this.cheker) {
console.log('Скидка уже активна')
} else {
this.price *= 0.75;
this.cheker = true;
console.log('Цена изменилась с учетом скидки');
}
}
}


productES5Demo('apple', 79);
productES6Demo('pear', 124)


function productES5Demo(name, price) {
console.log('Демонстрация работы объекта в стиле ES5');
console.log('Создание объекта');
let demoProduct = new ProductES5(name, price);
console.log('Имя продукта: ' + demoProduct.name);
console.log('Цена продукта: ' + demoProduct.price);
console.log('Делаем скидку...')
demoProduct.make25Discount();
console.log('Цена с учетом скидки: ' + demoProduct.price);
}

function productES6Demo(name, price) {
console.log('Демонстрация работы объекта в стиле ES6');
console.log('Создание объекта');
let demoProduct = new ProductES6(name, price);
console.log('Имя продукта: ' + demoProduct.name);
console.log('Цена продукта: ' + demoProduct.price);
console.log('Делаем скидку...')
demoProduct.make25Discount();
console.log('Цена с учетом скидки: ' + demoProduct.price);
}
</script>
</body>

</html>
160 changes: 160 additions & 0 deletions Lesson_3/2.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Homework</title>
</head>

<body>
<!--
Необязательное задание, но желательно сделать.

Необходимо данное задание выполнить в es5 стиле и в es6 стиле.
Необходимо создать функцию-конструктор/класс для поста в социальной сети.
Названия: `PostES5` для es5 стиля и `PostES6` для es6 стиля.
Пост должен хранить:
1. Автора поста (имени достаточно).
2. Текст поста.
3. Дату и время последнего изменения поста.
Данные автора поста и текст поста необходимо передавать при создании
экземпляра объекта.
Каждому экземпляру объекта должен быть доступен метод `edit`, который будет
менять текст поста.

---

Необходимо создать функцию-конструктор/класс для закрепленного поста в
социальной сети.
Названия: `AttachedPostES5` для es5 стиля и `AttachedPostES6` для es6 стиля.
Закрепленный пост должен наследоваться от обычного поста.
Данные автора поста и текст поста необходимо передавать при создании
экземпляра объекта.
Закрепленный пост должен иметь свойство `highlighted`, в котором по умолчанию
будет лежать значение false (это свойство будет обозначать, будет ли наш
закрепленный пост подсвечен).
У экземпляров объекта закрепленного поста должен быть метод с названием
`makeTextHighlighted`, который сделает так, чтобы наш пост стал подсвеченным
(будет менять свойство `highlighted`).

---

Подсказки:
1. Задание сложное, советую делать по аналогии с примером на онлайн-занятии.
2. Обратите внимание что пост хранит "дату и время последнего изменения
поста", это значит что если пост кто-то изменит (например вызовет какой-то
метод, который изменит что-то в посте), дата и время последнего изменения
поста также должна измениться.
3. Выполняйте все по порядку, не стоит пытаться сделать все сразу, иначе можно
что-нибудь пропустить.
4. Если непонятно условие - задайте вопрос.
-->
<script>
"use strict";

// ES5
function PostES5(author, content) {
this.author = author;
this.content = content;
this.date = String(new Date());
}

PostES5.prototype.edit = function (newContent) {
this.content = newContent;
this.date = String(new Date());
}

function AttachedPostES5(author, content) {
PostES5.call(this, author, content);
this.highlighted = false;
}

AttachedPostES5.prototype = Object.create(PostES5.prototype);
AttachedPostES5.prototype.constructor = AttachedPostES5;

AttachedPostES5.prototype.makeTextHighlighted = function () {
if (this.highlighted) {
this.highlighted = false;
} else {
this.highlighted = true;
}
}


// ES6
class PostES6 {
constructor(author, content) {
this.author = author;
this.content = content;
this.date = String(new Date());
}
edit(newContent) {
this.content = newContent;
this.date = String(new Date());
}
}

class AttachedPostES6 extends PostES6 {
constructor(author, content) {
super(author, content);
this.highlighted = false;
}
makeTextHighlighted() {
if (this.highlighted) {
this.highlighted = false;
} else {
this.highlighted = true;
}
}
}



// Demo
let name = 'Serghei';
let text = 'Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing industries for previewing layouts and visual mockups.';


demoPostES5(name, text);
demoPostES6(name, text);


function demoPostES5(name, text) {
let post = new AttachedPostES5(name, text);
console.log('ES5\n\n');
console.log('post.author: ' + post.author);
console.log('post.content: ' + post.content);
console.log('post.date: ' + post.date);
console.log('post.highlighted: ' + post.highlighted);
setTimeout(() => {
console.log('\npost.edit(\'Empty string\')\nРедактируем пост ES5...');
post.edit('Empty string');
console.log('post.content с новым содержимым: ' + post.content);
console.log('post.date: ' + post.date);
}, 2000);
console.log('post.makeTextHighlighted()\nВключаем подсветку...');
post.makeTextHighlighted();
console.log('post.highlighted: ' + post.highlighted + '\n\n');
}

function demoPostES6(name, text) {
let post = new AttachedPostES6(name, text);
console.log('ES6\n\n');
console.log('post.author: ' + post.author);
console.log('post.content: ' + post.content);
console.log('post.date: ' + post.date);
console.log('post.highlighted: ' + post.highlighted);
setTimeout(() => {
console.log('\npost.edit(\'Empty string\')\nРедактируем пост ES6...');
post.edit('Empty string');
console.log('post.content с новым содержимым: ' + post.content);
console.log('post.date: ' + post.date);
}, 2000);
console.log('post.makeTextHighlighted()\nВключаем подсветку...');
post.makeTextHighlighted();
console.log('post.highlighted: ' + post.highlighted + '\n\n');
}
</script>
</body>

</html>
41 changes: 41 additions & 0 deletions Lesson_3/3.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Homework</title>
</head>

<body>
<!--
Необязательное задание.

Необходимо создать функцию getDigitsOfNumber, которая принимает целое
положительное число в диапазоне от 0 до 1000.
Функция должна вернуть обычный объект с тремя свойствами:
1. units - содержит число, количество единиц в параметре функции.
2. dozens - содержит число, количество десятков в параметре функции.
3. hundreds - содержит число, количество сотен в параметре функции.
Если функции было передано не целое положительное число, либо число в ином
диапазоне, нежели задано в условии, функция должна вывести в консоль информацию
об ошибке и вернуть пустой объект.
Необходимо также прописать jsdoc для данной функции.

Подсказка:
У объекта console есть разные методы, мы часто используем console.log для того
чтобы вывести в консоль какое-то значение, однако есть и другие методы, найдите
в интернете какие методы существуют и используйте "правильный метод" в нужном
месте. Обратите внимание что функция не должна выбрасывать ошибку, она должна
только вывести в консоль информацию о том, что что-то пошло не так.
Обратите внимание на слова "от 0 до 1000", это означает диапазон [0, 999], что
можно прочитать как "от нуля до 999 включительно".
-->
<script>
"use strict";

// Здесь пишем решение, данный комментарий необходимо стереть.
// Необязательное задание.
</script>
</body>

</html>