function Звуки(ключники, события) { this.создать = function() { this.задано = {}; this.аудио = {}; события.подписать(this); var тут = this; ключники.push(function(ключ, путь, значение) { тут.обработатьКлюч(ключ, путь, значение); }); }; this.обработатьКлюч = function(ключ, путь, значение) { if (!путь[0].startsWith("звуки")) { return; } var имя = путь[1]; var свойство = путь.slice(2).join("."); if (!this.задано[имя]) { this.задано[имя] = {}; } this.задано[имя][свойство] = значение; }; this.обработатьСобытие = function(событие) { for (var имя in this.задано) { var значения = this.задано[имя]; if (!значения.файл) { continue; } for (var свойство in значения) { if (свойство.startsWith("события")) { var значение = значения[свойство]; if (событие == значение) { this.воспроизвести(значения.файл, значения.повторять); return; } } } } }; this.воспроизвести = function(файл, повторять) { if (!this.аудио[файл]) { this.аудио[файл] = new Audio(файл); } var звук = this.аудио[файл]; звук.pause(); звук.currentTime = 0; звук.play(); if (повторять) { звук.onended = function() { звук.play(); } } }; // Конструктор. this.создать(); }