123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- // Required
- // Логирование поступающих сообщений в объекте log
- // Задан массив сообщений и пустой объект log:
- // let messages = [
- // "backspace",
- // "enter",
- // "shift",
- // "control",
- // "delete",
- // "space",
- // "subtract"
- // ]
- // var log = {}
- // Далее, есть функция, отправляющая сообщения в случайном порядке в случайное время:
- // var sendMessage = ( message, callback ) =>
- // setTimeout (
- // () => callback ( message ),
- // Math.random () * 7000
- // )
- // Обратите внимание, что эта функция получает при вызове не только текст сообщения, но и колбэк-функцию, которой нужно передать это сообщение
- // С помощью кода:
- // messages.forEach (
- // message => sendMessage ( message, handler )
- // )
- // инициируем отправку сообщений
- // Ваша задача - напилить код функции handler,
- // которая получает сообщение и заносит его в объект log
- // в виде нового свойства,
- // значение которого - текст поступившего сообщения,
- // а ключ ( имя свойства ) - это время поступления сообщения ( в виде строки )
- // log
- // {
- // 19:34:08: "control"
- // 19:34:08[2]: "backspace"
- // 19:34:09: "subtract"
- // 19:34:09[2]: "enter"
- // 19:34:11: "delete"
- // 19:34:11[2]: "shift"
- // }
- // В помощь вам уже есть функция, которая формирует ключ очередного сообщения:
- // getKey = () => {
- // let key = new Date().toLocaleTimeString(), x = 0
- // while ( log [ `${key}[${x}]` ] ) { x++ }
- // return `${key}[${x}]`
- // }
- // На случай, если два сообщения поступят одновременно, функция getKey добавляет "[0]", "[1]", "[2]"... к значению ключа ( иначе значения ключей
- // могут дублироваться, что приведет к генерации исключения )
- (function() {
- let messages = [
- "backspace",
- "enter",
- "shift",
- "control",
- "delete",
- "space",
- "subtract"
- ]
-
- var log = {}
- var sendMessage = ( message, callback ) =>
- setTimeout (
- () => callback ( message ),
- Math.random () * 7000
- )
-
- const getKey = () => {
- let key = new Date().toLocaleTimeString(), x = 0
- while ( log [ `${key}[${x}]` ] ) { x++ }
- return `${key}[${x}]`
- };
- const handler = (message) =>
- log[getKey()] = message;
-
- messages.forEach (
- message => sendMessage ( message, handler )
- );
- setTimeout(() => {console.log(log)}, 3000)
- }) ()
- // Additionally
- // Допилите код конструктора User, дополнив его акцессорами приватного свойства presence так, чтобы после выполнения скрипта:
- // function User ( name ) {
- // this.name = name
- // var presence = false
- // ...
- // }
- // let user = new User ( "Ivan" )
- // console.info ( user.presence )
- // в консоли было:
- // "Ivan is absent"
- // а после выполнения кода:
- // user.presence = "+"
- // console.info ( user.presence )
- // в консоли было:
- // "Ivan is present"
- function User ( name ) {
- this.name = name
- var presence = false
-
- Object.defineProperty(this, "presence", {
- get: () => presence === false ? `${name} is absent` : `${name} is present`,
- set: val => presence = val
- })
- }
- let user = new User ( "Ivan" )
- console.info ( user.presence )
- user.presence = "+"
- console.info ( user.presence )
|