hw 10 - garevna/js-course GitHub Wiki
Задан массив сообщений и пустой объект 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
в виде нового свойства,
значение которого - текст поступившего сообщения,
а ключ ( имя свойства ) - это время поступления сообщения ( в виде строки )
{
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]"... к значению ключа ( иначе значения ключей могут дублироваться, что приведет к генерации исключения )
Допилите код конструктора 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"
Объявить функцию-конструктор User
массив:
[
"https://pre00.deviantart.net/50f9/th/pre/i/2011/217/e/8/pikachu_2_by_nostalgiaattack-d45jd3i.png",
"https://cdn.diversityavatars.com/wp-content/uploads/2018/01/Vector-Smart-Object-5.png",
"https://cdn4.iconfinder.com/data/icons/user-avatar-flat-icons/512/User_Avatar-31-512.png",
"http://icons.iconarchive.com/icons/hopstarter/face-avatars/256/Male-Face-L3-icon.png",
"https://findicons.com/files/icons/1072/face_avatars/300/i05.png",
"http://www.iconarchive.com/download/i51043/hopstarter/halloween-avatars/Gomez.ico",
"http://icons.iconarchive.com/icons/hopstarter/halloween-avatars/256/Zombie-2-icon.png",
"https://vignette.wikia.nocookie.net/yogscast/images/8/8a/Avatar_Turps_2015.jpg"
]объект следующей структуры:
{
photoURL: "https://i.pinimg.com/originals/3d/47/4f/3d474f82ff71595e8081f9a120892ae8.gif",
name: "admin"
}
|
Админ пишет непосредственно в messageBox |
метод, возвращающий извлеченный из массива avatars элемент
return this.avatars.shift ()
Конструктор должен иметь дефолтные значения для всех аргументовдефолтное значение URL фотографии пользователя должно быть результатом работы статического метода getAvatar
messageBox - это контейнер, куда будут выводиться сообщения всех пользователей и adminпри выводе сообщения пользователя в messageBox должны отображаться его аватар и имя
запись осуществляется в messageBox, чтение - из messageBox
var users = [
new User ( "Иван" ),
new User ( 'Alex', "[email protected]" ),
new User ( 'Bob', "[email protected]" ),
new User ( 'Dima', "[email protected]" ),
new User ( 'Fima', "[email protected]" )
]
var k = 1
users.forEach (
function ( user ) {
setTimeout (
function () {
user.write ( `Hello, I'm ${user.name}` )
}, 3000 * k++
)
}
)🔵 Короче, юзеры пишут в messageBox из консоли:
users[index].write ( text )а вот админ - непосредственно вводит текст в messageBox
( т.е. при вводе в messageBox пишущий сообщение идентифицируется как админ, выводится его аватар и имя )
☕ Что примерно должно получиться ( не смотрите код сразу, попробуйте сами )