script.js 7.6 KB

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