Михаил Капелько 3 лет назад
Родитель
Сommit
d27ec1cae5
3 измененных файлов: 122 добавлений и 116 удалений
  1. +68
    -0
      0001.мир.js
  2. +52
    -0
      0100.пример.js
  3. +2
    -116
      index.html

+ 68
- 0
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("неизвестная пара ключ/значение", ключ, значение);
}
}
};


+ 52
- 0
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);
мир.запустить();

+ 2
- 116
index.html Просмотреть файл

@@ -17,121 +17,7 @@
</style>
</head>
<body>
<script>
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("неизвестная пара ключ/значение", ключ, значение);
}
}
};

console.debug("строки отдельно", {строки: ["a", "b", "c"]});

var json1 = {
строки: [
"abc",
"def",
"ghi",
{
ключ: "uuu",
},
],
вывести: function(аргумент) {
console.debug('выводим аргумент:', аргумент);
}.toString(),
пример: function(аргумент) {
мир.вывести("уга");
console.debug("функция-пример исполнена. аргумент:", аргумент);
}.toString(),
набор: {
проба: function() {
console.debug("это проба");
}.toString(),
простоСтрока: "уппамам",
глубже: {
ещё: {
функция9на12: function(аргумент) {
console.debug("функция9на12", аргумент);
}.toString(),
опятьСтрока: "ого",
},
},
},
};

json2 = JSON.stringify(json1);
console.debug("2", json2);

var json3 = JSON.parse(json2);
console.debug("3", json3);

мир.разобрать(json3);

console.debug("мир.пример", мир.пример);

мир.пример(123);
мир.вывести(77);

console.debug("мир", мир);

</script>
<script src="0001.мир.js"></script>
<script src="0100.пример.js"></script>
</body>
</html>

Загрузка…
Отмена
Сохранить