// 1. Создайте объект calculator с методами: // read() запрашивает prompt для двух значений и сохраняет их как свойства объекта x, y // sum() возвращает сумму этих двух значений // multi() возвращает произведение этих двух значений // diff() возвращает разницу // div() возвращает частное var calculator = { read: function() { this.x = +prompt('Введите a', 10); this.y = +prompt('Введите b', 10); return this; }, 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() { setTimeout (( function() { alert(this.message); }).bind(this), 3000); } } coffeeMachine.start (); /* 3. Создайте функцию hello(), которая выводит приветствие пользователю. Создайте два объекта, содержащие поля firstname, lastname. Используя метод call и функцию hello() приветствуйте каждого из пользователей персонально.*/ function hello () { alert ('Hello! '+this.firstname + ' ' + this.lastname); } var user1 = {firstname: 'Vasya', lastname: 'Vetrov'}; var user2 = {firstname: 'Egor', lastname: 'Bityak'}; hello.call (user1); hello.call (user2); /* 4. Создайте объект counter с методами увеличения, уменьшения значения счетчика и методом возврата текущего значения. Используйте концепцию chaining для создания цепочки вызовов.*/ var counter = { val: 0, inc: function () { this.val++; return this; }, dec: function () { this.val--; return this; }, getValue: function () { return this.val; } }; var current = counter.inc().inc().inc().inc().dec().inc().dec().inc().getValue(); alert(current); // 4 /* 5. Создайте объект с данными: x, y и методами: getSum, getDiff, getMulti, getDiv. Методы объекта ничего не реализуют, а только выводят в alert сообщения вида ‘1 + 1 = 2’ или ‘1 / 0 = Infinity’. Для расчетов все методы используют функционал ранее созданного калькулятора.*/ var me = { getSum: function(x,y){ this.x = x; this.y = y; return this.x + ' + ' + this.y +' = '+ calculator.sum.call(this); }, getMulti: function(x,y){ this.x = x; this.y = y; return this.x + ' * ' + this.y +' = '+ calculator.multi.call(this); }, getDiff: function(x,y){ this.x = x; this.y = y; return this.x + ' - ' + this.y +' = '+ calculator.diff.call(this); }, getDiv: function(x,y){ this.x = x; this.y = y; return this.x + ' / ' + this.y +' = '+ calculator.div.call(this); } }; console.log (me); alert (me.getSum(5, 5)); alert (me.getDiff(5, 5)); alert (me.getMulti(5, 5)); alert (me.getDiv(1, 0)); /* 6. Придумайте алгоритм расчета суммы всех фактических параметров функции с использованием только рекурсии.*/ function sum() { var arr = arguments[arguments.length-1]; arguments.length--; if (arguments.length > 0) arr += sum.apply (null, arguments); return arr; } console.log( sum(58, 54+10, 22, 87, 12, 03, 52) ); // 298 /* 7. Создайте объект со свойством delay и методами appendTo и appendText. Метод appendTo с помощью jQuery добавляет абзац в контейнер, переданный в параметре метода. Метод appendText может дописывает текст в добавленный элемент. Создайте массив строк и запустите цикл по этому массиву. С периодичностью, определенной в свойстве delay, в текст добавленного html-элемента добавляется соответствующий по порядку элемент массива. Учтите, что для доступа к вашему элементу не должен производиться поиск по DOM-дереву.*/ var str = 'Создайте объект со свойством delay и методами appendTo и appendText'; var arr = str.split(' '); var obj = { delay: 1500, appendTo: function (container) { this.content = $('

').appendTo(container); }, appendText: function (text) { this.content.append(text + ' '); } }; obj.appendTo('body'); for (var i = 0; i < arr.length; i++) { (function () { var j = i; setTimeout(function () { obj.appendText(arr[j]); }, obj.delay * 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. */ var user = { name: 'Slava' }; function format(start, end) { console.log(start + this.name + end); } /* Реализуйте 2 версии текущего задания, используя: 1. Анонимную функцию; 2. Метод bind().*/ var userFormat = function () { return format.apply(user, arguments); }; userFormat('<<<', '>>>'); var userFormatBind = format.bind(user); userFormatBind('<<<', '>>>'); /* 10. Напишите функцию concat, которая соединяет две строки, разделенные каким-то символом: разделитель и строки передаются в параметрах функции. Используя карринг, создайте новую функцию hello, которая которая выводит приветствие тому, кто передан в ее параметре:*/ function concat(str1, a, str2) { alert(str1 + a + str2); } var hello = concat.bind (null, 'Hello ', ''); hello('World'); // Hello World hello('Slava'); // Hello Slava /* 11. Составьте структуру и изобразите на странице правила интерпретации значений в логическом контексте: */ var content = ''; var arrCondition = [true, false, 1, 0, "", '1', '0', null, undefined, '{ }', '[ ]', NaN]; var arrResult = new Array (); var i, j; content += ''+''; arrCondition.forEach(function(arrCondition, i) { content += ''; }); content += ''; for (i=0; i'+arrCondition[i]+''; for (j=0; j'; } else { arrResult[i][j]='No'; content += ''; } } content += ''; } content += '
' + arrCondition + '
' + arrResult[i][j] + '
'; $('body').append(content); $('table').css({ 'font-family': 'Arial', 'border-collapse': 'collapse', 'width': '70%', 'border-spacing': '0', 'text-align': 'center' }); $('table td').css ({ 'border': '1px solid #6A3E14', 'padding': '2px', 'height': '25px', 'width': '50px' }); $('.true').css({ 'background': 'green' }); $('.false').css({ 'background': 'red' }); console.log (arrResult);