function Объекты(события, состояние) { this.создать = function() { this.умолчание = { пр: [0, 0, 40, 20], }; this.задано = {}; события.подписать(this); }; this.обновитьИзображение = function(имя) { let имяИзо = `объекты-${имя}`; let за = this.задано[имя]; let пр = this.умолчание.пр; var описание = { ширина: за["пр.2"] ? за["пр.2"] : пр[2], высота: за["пр.3"] ? за["пр.3"] : пр[3], вид: {}, }; for (var ключ in за) { if (ключ.startsWith("вид.")) { var к = ключ.substring(4); var значение = за[ключ]; описание.вид[к] = значение; } } состояние.разобрать({ изображения: { [имяИзо]: описание, }, }); }; this.обработатьКлюч = function(ключ, путь, значение) { if (путь[0] != "объекты") { return; } let имя = путь[1]; let свойство = путь.slice(2).join("."); if (!this.задано[имя]) { this.задано[имя] = {}; } this.задано[имя][свойство] = значение; let пр = свойство.startsWith("пр."); if (пр) { this.пересоздатьТело(имя); } this.обновитьИзображение(имя); }; this.пересоздатьТело = function(имя) { let имяТела = `объекты-${имя}`; let за = this.задано[имя]; let пр = this.умолчание.пр; состояние.разобрать({ тела: { [имяТела]: { x: за["пр.0"] ? за["пр.0"] : пр[0], y: за["пр.1"] ? за["пр.1"] : пр[1], ширина: за["пр.2"] ? за["пр.2"] : пр[2], высота: за["пр.3"] ? за["пр.3"] : пр[3], }, }, }); }; // Конструктор. this.создать(); };