|
@@ -0,0 +1,273 @@
|
|
|
+
|
|
|
+// 1. Создайте объект calculator с методами:
|
|
|
+ // read() запрашивает prompt для двух значений и сохраняет их как свойства объекта x, y
|
|
|
+ // sum() возвращает сумму этих двух значений
|
|
|
+ // multi() возвращает произведение этих двух значений
|
|
|
+ // diff() возвращает разницу
|
|
|
+ // div() возвращает частное
|
|
|
+
|
|
|
+
|
|
|
+var calculator = {
|
|
|
+ read: function() {
|
|
|
+ this.x = +prompt("Введите Х", "");
|
|
|
+ this.y = +prompt("Введите У", "");
|
|
|
+ },
|
|
|
+ sum: function() {
|
|
|
+ return this.x + this.y;
|
|
|
+ },
|
|
|
+ multi: function() {
|
|
|
+ return this.x * this.y;
|
|
|
+ },
|
|
|
+ diff: function() {
|
|
|
+ return this.x - this.y;
|
|
|
+ },
|
|
|
+ div: function() {
|
|
|
+ return this.x / this.y;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+calculator.read();
|
|
|
+alert( calculator.sum() );
|
|
|
+alert( calculator.multi() );
|
|
|
+alert( calculator.diff() );
|
|
|
+alert( calculator.div() );
|
|
|
+
|
|
|
+
|
|
|
+// 2. Создайте объект coffeeMachine со свойством message: ‘Your coffee is ready!’
|
|
|
+// и методом start(), при вызове которого – coffeeMachine.start() – через 3 секунды
|
|
|
+// появляется окно с сообщением, записанным в свойстве объекта message.
|
|
|
+
|
|
|
+
|
|
|
+var coffeeMachine = {
|
|
|
+ message: "Your coffee is ready!",
|
|
|
+ start: function() {
|
|
|
+ that = this;
|
|
|
+ setTimeout( function() {
|
|
|
+ alert(that.message);
|
|
|
+ }, 3000);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+coffeeMachine.start();
|
|
|
+
|
|
|
+// 3. Создайте функцию hello(), которая выводит приветствие пользователю.
|
|
|
+// Создайте два объекта, содержащие поля firstname, lastname. Используя метод
|
|
|
+// call и функцию hello() приветствуйте каждого из пользователей персонально.
|
|
|
+
|
|
|
+
|
|
|
+function hello() {
|
|
|
+ alert("Hello, " + this.getFullName());
|
|
|
+};
|
|
|
+
|
|
|
+var user_1 = {
|
|
|
+ firstname: "John",
|
|
|
+ lastname: "Johnson",
|
|
|
+ getFullName: function() {
|
|
|
+ return this.firstname + " " + this.lastname;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+var user_2 = {
|
|
|
+ firstname: "Jack",
|
|
|
+ lastname: "Jackson",
|
|
|
+ getFullName: function() {
|
|
|
+ return this.firstname + " " + this.lastname;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+hello.call(user_1);
|
|
|
+hello.call(user_2);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// 4. Создайте объект counter с методами увеличения, уменьшения значения
|
|
|
+// счетчика и методом возврата текущего значения. Используйте концепцию
|
|
|
+// chaining для создания цепочки вызовов.
|
|
|
+
|
|
|
+var counter = {
|
|
|
+ count: 0,
|
|
|
+ inc: function() {
|
|
|
+ this.count++;
|
|
|
+ return this;
|
|
|
+ },
|
|
|
+ dec: function() {
|
|
|
+ this.count--;
|
|
|
+ return this;
|
|
|
+ },
|
|
|
+ getValue: function() {
|
|
|
+ return this.count;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+var current = counter.inc().inc().dec().inc().dec().getValue();
|
|
|
+alert(current);
|
|
|
+
|
|
|
+
|
|
|
+// 5. Создайте объект с данными: x, y и методами: getSum, getSum, getMulti, getDiv.
|
|
|
+// Методы объекта ничего не реализуют, а только выводят в alert сообщения вида
|
|
|
+// ‘1 + 1 = 2’ или ‘1 / 0 = Infinity’. Для расчетов все методы используют функционал
|
|
|
+// ранее созданного калькулятора.
|
|
|
+
|
|
|
+var calculator = {
|
|
|
+ read: function() {
|
|
|
+ this.x = +prompt("Введите Х", "");
|
|
|
+ this.y = +prompt("Введите У", "");
|
|
|
+ },
|
|
|
+ sum: function() {
|
|
|
+ return this.x + this.y;
|
|
|
+ },
|
|
|
+ multi: function() {
|
|
|
+ return this.x * this.y;
|
|
|
+ },
|
|
|
+ diff: function() {
|
|
|
+ return this.x - this.y;
|
|
|
+ },
|
|
|
+ div: function() {
|
|
|
+ return this.x / this.y;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+var object = {
|
|
|
+ x: +prompt("Введите Х", ""),
|
|
|
+ y: +prompt("Введите Y", ""),
|
|
|
+ getSum: function() {
|
|
|
+ var sum = calculator.sum;
|
|
|
+ return alert(this.x + "+" + this.y + "=" + sum.call(object));
|
|
|
+ },
|
|
|
+ getDiff: function() {
|
|
|
+ var diff = calculator.diff;
|
|
|
+ return alert(this.x + "-" + this.y + "=" + diff.call(object));
|
|
|
+ },
|
|
|
+ getMulti: function() {
|
|
|
+ var multi = calculator.multi;
|
|
|
+ return alert(this.x + "*" + this.y + "=" + multi.call(object));
|
|
|
+ },
|
|
|
+ getDiv: function() {
|
|
|
+ var div = calculator.div;
|
|
|
+ return alert(this.x + "/" + this.y + "=" + div.call(object));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// 6. Придумайте алгоритм расчета суммы всех фактических параметров функции
|
|
|
+// с использованием только рекурсии:
|
|
|
+
|
|
|
+var sum = 0;
|
|
|
+
|
|
|
+function getSum(a, b, ...other) {
|
|
|
+
|
|
|
+ if (arguments.length >= 2) {
|
|
|
+ sum = a + b;
|
|
|
+ return getSum(sum, ...other);
|
|
|
+ } else {
|
|
|
+ return a;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+getSum(1,2,3,4,5);
|
|
|
+
|
|
|
+
|
|
|
+// 7. Создайте объект со свойством delay и методами appendTo и appendText.
|
|
|
+// Метод appendTo с помощью jQuery добавляет абзац в контейнер, переданный в
|
|
|
+// параметре метода. Метод appendText может дописывает текст в добавленный элемент.
|
|
|
+// Создайте массив строк и запустите цикл по этому массиву. С периодичностью,
|
|
|
+// определенной в свойстве delay, в текст добавленного html-элемента добавляется
|
|
|
+// соответствующий по порядку элемент массива. Учтите, что для доступа к вашему
|
|
|
+// элементу не должен производиться поиск по DOM-дереву.
|
|
|
+
|
|
|
+var arr = ["Hello,", "World!", "This", "is", "some", "text"];
|
|
|
+
|
|
|
+var object = {
|
|
|
+ delay: 1000,
|
|
|
+ appendTo: function(par) {
|
|
|
+ $(par).append("<p>");
|
|
|
+ },
|
|
|
+ appendText: function(str) {
|
|
|
+ $("p").append(str);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+object.appendTo("body");
|
|
|
+
|
|
|
+for(var i = 0; i < arr.length; i++) {
|
|
|
+
|
|
|
+ (function(i) {
|
|
|
+ setTimeout(function() {
|
|
|
+ object.appendText(arr[i]+" ");
|
|
|
+ }, object.delay+i*1000)
|
|
|
+ })(i);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// 8. Есть следующий код:
|
|
|
+
|
|
|
+var country = {
|
|
|
+ name: 'Ukraine',
|
|
|
+ language: 'ukrainian',
|
|
|
+ capital: {
|
|
|
+ name: 'Kyiv',
|
|
|
+ population: 2907817,
|
|
|
+ area: 847.66
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+function format(start, end) {
|
|
|
+ console.log(start + this.name + end);
|
|
|
+}
|
|
|
+
|
|
|
+format.call(country,"",""); // Ukraine
|
|
|
+format.apply(country, ["[", "]"]); // [Ukraine]
|
|
|
+format.call(country.capital,"",""); // Kyiv
|
|
|
+format.apply(country.capital, ["",""]); // Kyiv
|
|
|
+format.apply(null, [""]); // undefined
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// 9. Создайте объект user с полем name. Создайте функцию format с параметрами start и end.
|
|
|
+// Привяжите функцию format() к объекту user таким образом, чтобы ее вызов возвращал
|
|
|
+// отформатированное имя пользователя.
|
|
|
+// Реализуйте 2 версии текущего задания, используя:
|
|
|
+// 1. Анонимную функцию;
|
|
|
+// 2. Метод bind().
|
|
|
+
|
|
|
+var user = {
|
|
|
+ name: "John"
|
|
|
+};
|
|
|
+
|
|
|
+function format(start, end) {
|
|
|
+ console.log(start + this.name + end);
|
|
|
+}
|
|
|
+
|
|
|
+// function() {
|
|
|
+// format("<<<", ">>>");
|
|
|
+// }
|
|
|
+
|
|
|
+var userFormat = format.bind(user);
|
|
|
+
|
|
|
+userFormat('<<<', '>>>');
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// 10. Напишите функцию concat, которая соединяет две строки, разделенные каким-то
|
|
|
+// символом: разделитель и строки передаются в параметрах функции. Используя карринг,
|
|
|
+// создайте новую функцию hello, которая которая выводит приветствие тому, кто передан
|
|
|
+// в ее параметре
|
|
|
+
|
|
|
+function concat(str1, sep, str2) {
|
|
|
+
|
|
|
+ return console.log(str1+sep+str2);
|
|
|
+}
|
|
|
+
|
|
|
+var hello = concat.bind(null, "Hello", " ");
|
|
|
+
|
|
|
+hello('World');
|
|
|
+hello('John');
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|