// 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("

"); }, 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');