index.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // Required
  2. // Логирование поступающих сообщений в объекте log
  3. // Задан массив сообщений и пустой объект log:
  4. // let messages = [
  5. // "backspace",
  6. // "enter",
  7. // "shift",
  8. // "control",
  9. // "delete",
  10. // "space",
  11. // "subtract"
  12. // ]
  13. // var log = {}
  14. // Далее, есть функция, отправляющая сообщения в случайном порядке в случайное время:
  15. // var sendMessage = ( message, callback ) =>
  16. // setTimeout (
  17. // () => callback ( message ),
  18. // Math.random () * 7000
  19. // )
  20. // Обратите внимание, что эта функция получает при вызове не только текст сообщения, но и колбэк-функцию, которой нужно передать это сообщение
  21. // С помощью кода:
  22. // messages.forEach (
  23. // message => sendMessage ( message, handler )
  24. // )
  25. // инициируем отправку сообщений
  26. // Ваша задача - напилить код функции handler,
  27. // которая получает сообщение и заносит его в объект log
  28. // в виде нового свойства,
  29. // значение которого - текст поступившего сообщения,
  30. // а ключ ( имя свойства ) - это время поступления сообщения ( в виде строки )
  31. // log
  32. // {
  33. // 19:34:08: "control"
  34. // 19:34:08[2]: "backspace"
  35. // 19:34:09: "subtract"
  36. // 19:34:09[2]: "enter"
  37. // 19:34:11: "delete"
  38. // 19:34:11[2]: "shift"
  39. // }
  40. // В помощь вам уже есть функция, которая формирует ключ очередного сообщения:
  41. // getKey = () => {
  42. // let key = new Date().toLocaleTimeString(), x = 0
  43. // while ( log [ `${key}[${x}]` ] ) { x++ }
  44. // return `${key}[${x}]`
  45. // }
  46. // На случай, если два сообщения поступят одновременно, функция getKey добавляет "[0]", "[1]", "[2]"... к значению ключа ( иначе значения ключей
  47. // могут дублироваться, что приведет к генерации исключения )
  48. (function() {
  49. let messages = [
  50. "backspace",
  51. "enter",
  52. "shift",
  53. "control",
  54. "delete",
  55. "space",
  56. "subtract"
  57. ]
  58. var log = {}
  59. var sendMessage = ( message, callback ) =>
  60. setTimeout (
  61. () => callback ( message ),
  62. Math.random () * 7000
  63. )
  64. const getKey = () => {
  65. let key = new Date().toLocaleTimeString(), x = 0
  66. while ( log [ `${key}[${x}]` ] ) { x++ }
  67. return `${key}[${x}]`
  68. };
  69. const handler = (message) =>
  70. log[getKey()] = message;
  71. messages.forEach (
  72. message => sendMessage ( message, handler )
  73. );
  74. setTimeout(() => {console.log(log)}, 3000)
  75. }) ()
  76. // Additionally
  77. // Допилите код конструктора User, дополнив его акцессорами приватного свойства presence так, чтобы после выполнения скрипта:
  78. // function User ( name ) {
  79. // this.name = name
  80. // var presence = false
  81. // ...
  82. // }
  83. // let user = new User ( "Ivan" )
  84. // console.info ( user.presence )
  85. // в консоли было:
  86. // "Ivan is absent"
  87. // а после выполнения кода:
  88. // user.presence = "+"
  89. // console.info ( user.presence )
  90. // в консоли было:
  91. // "Ivan is present"
  92. function User ( name ) {
  93. this.name = name
  94. var presence = false
  95. Object.defineProperty(this, "presence", {
  96. get: () => presence === false ? `${name} is absent` : `${name} is present`,
  97. set: val => presence = val
  98. })
  99. }
  100. let user = new User ( "Ivan" )
  101. console.info ( user.presence )
  102. user.presence = "+"
  103. console.info ( user.presence )