script.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. // 1. Создайте объект calculator с методами:
  2. // read() запрашивает prompt для двух значений и сохраняет их как свойства объекта x, y
  3. // sum() возвращает сумму этих двух значений
  4. // multi() возвращает произведение этих двух значений
  5. // diff() возвращает разницу
  6. // div() возвращает частное
  7. var calculator = {
  8. read: function() {
  9. this.x = +prompt('Введите a', 10);
  10. this.y = +prompt('Введите b', 10);
  11. return this;
  12. },
  13. sum: function() {
  14. return this.x + this.y;
  15. },
  16. multi: function() {
  17. return this.x * this.y;
  18. },
  19. diff: function() {
  20. return this.x - this.y;
  21. },
  22. div: function() {
  23. return this.x / this.y;
  24. }
  25. }
  26. calculator.read();
  27. alert('Сумма = ' + calculator.sum() );
  28. alert('Произведение = ' + calculator.multi() );
  29. alert('Разница = ' + calculator.diff() );
  30. alert('Частное = ' + calculator.div() );
  31. /* 2. Создайте объект coffeeMachine со свойством message:
  32. ‘Your coffee is ready!’ и методом start(),
  33. при вызове которого – coffeeMachine.start() – через 3 секунды появляется окно с сообщением,
  34. записанным в свойстве объекта message.*/
  35. var coffeeMachine = {
  36. message: 'Your coffee is ready!',
  37. start: function() {
  38. setTimeout (( function() {
  39. alert(this.message);
  40. }).bind(this), 3000);
  41. }
  42. }
  43. coffeeMachine.start ();
  44. /* 3. Создайте функцию hello(), которая выводит приветствие пользователю.
  45. Создайте два объекта, содержащие поля firstname, lastname.
  46. Используя метод call и функцию hello()
  47. приветствуйте каждого из пользователей персонально.*/
  48. function hello () {
  49. alert ('Hello! '+this.firstname + ' ' + this.lastname);
  50. }
  51. var user1 = {firstname: 'Vasya', lastname: 'Vetrov'};
  52. var user2 = {firstname: 'Egor', lastname: 'Bityak'};
  53. hello.call (user1);
  54. hello.call (user2);
  55. /* 4. Создайте объект counter с методами увеличения,
  56. уменьшения значения счетчика и методом возврата текущего значения.
  57. Используйте концепцию chaining для создания цепочки вызовов.*/
  58. var counter = {
  59. val: 0,
  60. inc: function () {
  61. this.val++;
  62. return this;
  63. },
  64. dec: function () {
  65. this.val--;
  66. return this;
  67. },
  68. getValue: function () {
  69. return this.val;
  70. }
  71. };
  72. var current = counter.inc().inc().inc().inc().dec().inc().dec().inc().getValue();
  73. alert(current); // 4
  74. /* 5. Создайте объект с данными: x, y и методами:
  75. getSum, getDiff, getMulti, getDiv. Методы объекта ничего не реализуют,
  76. а только выводят в alert сообщения вида ‘1 + 1 = 2’ или ‘1 / 0 = Infinity’.
  77. Для расчетов все методы используют функционал ранее созданного калькулятора.*/
  78. var me = {
  79. getSum: function(x,y){
  80. this.x = x;
  81. this.y = y;
  82. return this.x + ' + ' + this.y +' = '+ calculator.sum.call(this);
  83. },
  84. getMulti: function(x,y){
  85. this.x = x;
  86. this.y = y;
  87. return this.x + ' * ' + this.y +' = '+ calculator.multi.call(this);
  88. },
  89. getDiff: function(x,y){
  90. this.x = x;
  91. this.y = y;
  92. return this.x + ' - ' + this.y +' = '+ calculator.diff.call(this);
  93. },
  94. getDiv: function(x,y){
  95. this.x = x;
  96. this.y = y;
  97. return this.x + ' / ' + this.y +' = '+ calculator.div.call(this);
  98. }
  99. };
  100. console.log (me);
  101. alert (me.getSum(5, 5));
  102. alert (me.getDiff(5, 5));
  103. alert (me.getMulti(5, 5));
  104. alert (me.getDiv(1, 0));
  105. /* 6. Придумайте алгоритм расчета суммы всех
  106. фактических параметров функции с использованием
  107. только рекурсии.*/
  108. function sum() {
  109. var arr = arguments[arguments.length-1];
  110. arguments.length--;
  111. if (arguments.length > 0) arr += sum.apply (null, arguments);
  112. return arr;
  113. }
  114. console.log( sum(58, 54+10, 22, 87, 12, 03, 52) ); // 298
  115. /* 7. Создайте объект со свойством delay
  116. и методами appendTo и appendText.
  117. Метод appendTo с помощью jQuery добавляет абзац в контейнер,
  118. переданный в параметре метода. Метод appendText может дописывает
  119. текст в добавленный элемент. Создайте массив строк и запустите
  120. цикл по этому массиву. С периодичностью, определенной в свойстве delay,
  121. в текст добавленного html-элемента добавляется соответствующий
  122. по порядку элемент массива. Учтите, что для доступа
  123. к вашему элементу не должен производиться поиск по DOM-дереву.*/
  124. var str = 'Создайте объект со свойством delay и методами appendTo и appendText';
  125. var arr = str.split(' ');
  126. var obj = {
  127. delay: 1500,
  128. appendTo: function (container) {
  129. this.content = $('<p>').appendTo(container);
  130. },
  131. appendText: function (text) {
  132. this.content.append(text + ' ');
  133. }
  134. };
  135. obj.appendTo('body');
  136. for (var i = 0; i < arr.length; i++) {
  137. (function () {
  138. var j = i;
  139. setTimeout(function () {
  140. obj.appendText(arr[j]);
  141. }, obj.delay * i)
  142. })();
  143. }
  144. /* 8. Есть следующий код:*/
  145. var country = {
  146. name: 'Ukraine',
  147. language: 'ukrainian',
  148. capital: {
  149. name: 'Kyiv',
  150. population: 2907817,
  151. area: 847.66
  152. }
  153. };
  154. function format(start, end) {
  155. console.log(start + this.name + end);
  156. }
  157. /* Допишите код, чтобы в консоли браузера появились строки,
  158. которые написаны в комментариях:*/
  159. format.call(country, '', ''); // Ukraine
  160. format.apply(country, ['[', ']']); // [Ukraine]
  161. format.call(country.capital, '', ''); // Kyiv
  162. format.apply(country.capital, ['', '']); // Kyiv
  163. format.apply(null, ['', '']); // undefined
  164. /* 9. Создайте объект user с полем name. Создайте функцию format
  165. с параметрами start и end. */
  166. var user = {
  167. name: 'Slava'
  168. };
  169. function format(start, end) {
  170. console.log(start + this.name + end);
  171. }
  172. /* Реализуйте 2 версии текущего задания, используя:
  173. 1. Анонимную функцию;
  174. 2. Метод bind().*/
  175. var userFormat = function () {
  176. return format.apply(user, arguments);
  177. };
  178. userFormat('<<<', '>>>');
  179. var userFormatBind = format.bind(user);
  180. userFormatBind('<<<', '>>>');
  181. /* 10. Напишите функцию concat, которая соединяет две строки,
  182. разделенные каким-то символом: разделитель и строки
  183. передаются в параметрах функции. Используя карринг,
  184. создайте новую функцию hello,
  185. которая которая выводит приветствие тому,
  186. кто передан в ее параметре:*/
  187. function concat(str1, a, str2) {
  188. alert(str1 + a + str2);
  189. }
  190. var hello = concat.bind (null, 'Hello ', '');
  191. hello('World'); // Hello World
  192. hello('Slava'); // Hello Slava
  193. /* 11. Составьте структуру и изобразите на странице правила интерпретации
  194. значений в логическом контексте: */
  195. var content = '<table>';
  196. var arrCondition = [true, false, 1, 0, "", '1', '0', null, undefined, '{ }', '[ ]', NaN];
  197. var arrResult = new Array ();
  198. var i, j;
  199. content += '<thead>'+'<td> </td>';
  200. arrCondition.forEach(function(arrCondition, i) {
  201. content += '<td>' + arrCondition + '</td>';
  202. });
  203. content += '</thead>';
  204. for (i=0; i<arrCondition.length; i++) {
  205. var x = arrCondition[i];
  206. arrResult [i] = new Array();
  207. content += '<tr>'+'<td>'+arrCondition[i]+'</td>';
  208. for (j=0; j<arrCondition.length; j++) {
  209. if (x == arrCondition[j]) {
  210. arrResult[i][j]='Yes';
  211. content += '<td class="true">' + arrResult[i][j] + '</td>';
  212. } else {
  213. arrResult[i][j]='No';
  214. content += '<td class="false">' + arrResult[i][j] + '</td>';
  215. }
  216. }
  217. content += '</tr>';
  218. }
  219. content += '</table>';
  220. $('body').append(content);
  221. $('table').css({
  222. 'font-family': 'Arial',
  223. 'border-collapse': 'collapse',
  224. 'width': '70%',
  225. 'border-spacing': '0',
  226. 'text-align': 'center'
  227. });
  228. $('table td').css ({
  229. 'border': '1px solid #6A3E14',
  230. 'padding': '2px',
  231. 'height': '25px',
  232. 'width': '50px'
  233. });
  234. $('.true').css({
  235. 'background': 'green'
  236. });
  237. $('.false').css({
  238. 'background': 'red'
  239. });
  240. console.log (arrResult);