123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- // 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 = $('<p>').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 = '<table>';
- var arrCondition = [true, false, 1, 0, "", '1', '0', null, undefined, '{ }', '[ ]', NaN];
- var arrResult = new Array ();
- var i, j;
- content += '<thead>'+'<td> </td>';
- arrCondition.forEach(function(arrCondition, i) {
- content += '<td>' + arrCondition + '</td>';
- });
- content += '</thead>';
- for (i=0; i<arrCondition.length; i++) {
- var x = arrCondition[i];
- arrResult [i] = new Array();
- content += '<tr>'+'<td>'+arrCondition[i]+'</td>';
- for (j=0; j<arrCondition.length; j++) {
- if (x == arrCondition[j]) {
- arrResult[i][j]='Yes';
- content += '<td class="true">' + arrResult[i][j] + '</td>';
- } else {
- arrResult[i][j]='No';
- content += '<td class="false">' + arrResult[i][j] + '</td>';
- }
- }
- content += '</tr>';
- }
- content += '</table>';
- $('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);
|