script.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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("Введите Х", "");
  10. this.y = +prompt("Введите У", "");
  11. },
  12. sum: function() {
  13. return this.x + this.y;
  14. },
  15. multi: function() {
  16. return this.x * this.y;
  17. },
  18. diff: function() {
  19. return this.x - this.y;
  20. },
  21. div: function() {
  22. return this.x / this.y;
  23. }
  24. }
  25. calculator.read();
  26. alert( calculator.sum() );
  27. alert( calculator.multi() );
  28. alert( calculator.diff() );
  29. alert( calculator.div() );
  30. // 2. Создайте объект coffeeMachine со свойством message: ‘Your coffee is ready!’
  31. // и методом start(), при вызове которого – coffeeMachine.start() – через 3 секунды
  32. // появляется окно с сообщением, записанным в свойстве объекта message.
  33. var coffeeMachine = {
  34. message: "Your coffee is ready!",
  35. start: function() {
  36. that = this;
  37. setTimeout( function() {
  38. alert(that.message);
  39. }, 3000);
  40. }
  41. }
  42. coffeeMachine.start();
  43. // 3. Создайте функцию hello(), которая выводит приветствие пользователю.
  44. // Создайте два объекта, содержащие поля firstname, lastname. Используя метод
  45. // call и функцию hello() приветствуйте каждого из пользователей персонально.
  46. function hello() {
  47. alert("Hello, " + this.getFullName());
  48. };
  49. var user_1 = {
  50. firstname: "John",
  51. lastname: "Johnson",
  52. getFullName: function() {
  53. return this.firstname + " " + this.lastname;
  54. }
  55. };
  56. var user_2 = {
  57. firstname: "Jack",
  58. lastname: "Jackson",
  59. getFullName: function() {
  60. return this.firstname + " " + this.lastname;
  61. }
  62. };
  63. hello.call(user_1);
  64. hello.call(user_2);
  65. // 4. Создайте объект counter с методами увеличения, уменьшения значения
  66. // счетчика и методом возврата текущего значения. Используйте концепцию
  67. // chaining для создания цепочки вызовов.
  68. var counter = {
  69. count: 0,
  70. inc: function() {
  71. this.count++;
  72. return this;
  73. },
  74. dec: function() {
  75. this.count--;
  76. return this;
  77. },
  78. getValue: function() {
  79. return this.count;
  80. }
  81. }
  82. var current = counter.inc().inc().dec().inc().dec().getValue();
  83. alert(current);
  84. // 5. Создайте объект с данными: x, y и методами: getSum, getSum, getMulti, getDiv.
  85. // Методы объекта ничего не реализуют, а только выводят в alert сообщения вида
  86. // ‘1 + 1 = 2’ или ‘1 / 0 = Infinity’. Для расчетов все методы используют функционал
  87. // ранее созданного калькулятора.
  88. var calculator = {
  89. read: function() {
  90. this.x = +prompt("Введите Х", "");
  91. this.y = +prompt("Введите У", "");
  92. },
  93. sum: function() {
  94. return this.x + this.y;
  95. },
  96. multi: function() {
  97. return this.x * this.y;
  98. },
  99. diff: function() {
  100. return this.x - this.y;
  101. },
  102. div: function() {
  103. return this.x / this.y;
  104. }
  105. }
  106. var object = {
  107. x: +prompt("Введите Х", ""),
  108. y: +prompt("Введите Y", ""),
  109. getSum: function() {
  110. var sum = calculator.sum;
  111. return alert(this.x + "+" + this.y + "=" + sum.call(object));
  112. },
  113. getDiff: function() {
  114. var diff = calculator.diff;
  115. return alert(this.x + "-" + this.y + "=" + diff.call(object));
  116. },
  117. getMulti: function() {
  118. var multi = calculator.multi;
  119. return alert(this.x + "*" + this.y + "=" + multi.call(object));
  120. },
  121. getDiv: function() {
  122. var div = calculator.div;
  123. return alert(this.x + "/" + this.y + "=" + div.call(object));
  124. }
  125. }
  126. // 6. Придумайте алгоритм расчета суммы всех фактических параметров функции
  127. // с использованием только рекурсии:
  128. var sum = 0;
  129. function getSum(a, b, ...other) {
  130. if (arguments.length >= 2) {
  131. sum = a + b;
  132. return getSum(sum, ...other);
  133. } else {
  134. return a;
  135. }
  136. };
  137. getSum(1,2,3,4,5);
  138. // 7. Создайте объект со свойством delay и методами appendTo и appendText.
  139. // Метод appendTo с помощью jQuery добавляет абзац в контейнер, переданный в
  140. // параметре метода. Метод appendText может дописывает текст в добавленный элемент.
  141. // Создайте массив строк и запустите цикл по этому массиву. С периодичностью,
  142. // определенной в свойстве delay, в текст добавленного html-элемента добавляется
  143. // соответствующий по порядку элемент массива. Учтите, что для доступа к вашему
  144. // элементу не должен производиться поиск по DOM-дереву.
  145. var arr = ["Hello,", "World!", "This", "is", "some", "text"];
  146. var object = {
  147. delay: 1000,
  148. appendTo: function(par) {
  149. $(par).append("<p>");
  150. },
  151. appendText: function(str) {
  152. $("p").append(str);
  153. }
  154. };
  155. object.appendTo("body");
  156. for(var i = 0; i < arr.length; i++) {
  157. (function(i) {
  158. setTimeout(function() {
  159. object.appendText(arr[i]+" ");
  160. }, object.delay+i*1000)
  161. })(i);
  162. }
  163. // 8. Есть следующий код:
  164. var country = {
  165. name: 'Ukraine',
  166. language: 'ukrainian',
  167. capital: {
  168. name: 'Kyiv',
  169. population: 2907817,
  170. area: 847.66
  171. }
  172. };
  173. function format(start, end) {
  174. console.log(start + this.name + end);
  175. }
  176. format.call(country,"",""); // Ukraine
  177. format.apply(country, ["[", "]"]); // [Ukraine]
  178. format.call(country.capital,"",""); // Kyiv
  179. format.apply(country.capital, ["",""]); // Kyiv
  180. format.apply(null, [""]); // undefined
  181. // 9. Создайте объект user с полем name. Создайте функцию format с параметрами start и end.
  182. // Привяжите функцию format() к объекту user таким образом, чтобы ее вызов возвращал
  183. // отформатированное имя пользователя.
  184. // Реализуйте 2 версии текущего задания, используя:
  185. // 1. Анонимную функцию;
  186. // 2. Метод bind().
  187. var user = {
  188. name: "John"
  189. };
  190. function format(start, end) {
  191. console.log(start + this.name + end);
  192. }
  193. // function() {
  194. // format("<<<", ">>>");
  195. // }
  196. var userFormat = format.bind(user);
  197. userFormat('<<<', '>>>');
  198. // 10. Напишите функцию concat, которая соединяет две строки, разделенные каким-то
  199. // символом: разделитель и строки передаются в параметрах функции. Используя карринг,
  200. // создайте новую функцию hello, которая которая выводит приветствие тому, кто передан
  201. // в ее параметре
  202. function concat(str1, sep, str2) {
  203. return console.log(str1+sep+str2);
  204. }
  205. var hello = concat.bind(null, "Hello", " ");
  206. hello('World');
  207. hello('John');