diff --git a/0001.мир.js b/0001.мир.js new file mode 100644 index 0000000..9d15ba0 --- /dev/null +++ b/0001.мир.js @@ -0,0 +1,68 @@ +var мир = {}; + +мир.строкаПути = function(п) { + function вСтроку(ключ) { + return `["${ключ}"]`; + } + return "мир" + п.map(вСтроку).join("") + " = "; +}; + +мир.создатьПуть = function(путь) { + var уровень = мир; + var длина = путь.length; + for (var i = 0; i < длина; ++i) + { + var п = путь[i]; + if (!уровень[п]) + { + уровень[п] = {}; + } + else + { + уровень = уровень[п]; + } + } +}; + +мир.разобрать = function(словарь, путь = []) { + for (ключ in словарь) + { + var внутреннийПуть = путь.slice(); + внутреннийПуть.push(ключ); + var значение = словарь[ключ]; + мир.создатьПуть(внутреннийПуть); + if (typeof значение === "string") + { + // Функция. + if (значение.startsWith("function")) + { + var содержимое = мир.строкаПути(внутреннийПуть) + значение; + eval(содержимое); + } + // Строка. + else + { + var содержимое = мир.строкаПути(внутреннийПуть) + '"' + значение + '"'; + eval(содержимое); + } + } + /* + // Массив. + else if (Array.isArray(значение)) + { + console.debug("разобрать массив"); + } + */ + // Словарь. + else if (значение === Object(значение)) + { + мир.разобрать(значение, внутреннийПуть); + } + // Неизвестное. + else + { + console.error("неизвестная пара ключ/значение", ключ, значение); + } + } +}; + diff --git a/0100.пример.js b/0100.пример.js new file mode 100644 index 0000000..d860a53 --- /dev/null +++ b/0100.пример.js @@ -0,0 +1,52 @@ +var json = { + вывести: function(аргумент) { + console.debug('выводим аргумент:', аргумент); + }.toString(), + пример: function(аргумент) { + мир.вывести("уга"); + console.debug("функция-пример исполнена. аргумент:", аргумент); + }.toString(), + набор: { + проба: function() { + console.debug("это проба"); + }.toString(), + простоСтрока: "уппамам", + глубже: { + ещё: { + функция9на12: function(аргумент) { + console.debug("функция9на12", аргумент); + }.toString(), + опятьСтрока: "ого", + }, + }, + }, + пусковыеФункции: [ + function() { + Object.defineProperty(мир, "заголовок", { + get: function() { + console.debug("да, get"); + return document.title; + }, + set: function(значение) { + console.debug("да, set"); + document.title = значение; + } + }); + }.toString(), + function() { + console.debug("заголовок-1:", мир.заголовок); + мир.заголовок = "два"; + console.debug("заголовок-2:", мир.заголовок); + }.toString(), + ], + запустить: function() { + for (var номер in мир.пусковыеФункции) + { + var функция = мир.пусковыеФункции[номер]; + функция(); + } + }.toString(), +}; + +мир.разобрать(json); +мир.запустить(); diff --git a/index.html b/index.html index fc01975..d22f714 100644 --- a/index.html +++ b/index.html @@ -17,121 +17,7 @@ - + +