заголовок
This commit is contained in:
68
0001.мир.js
Normal file
68
0001.мир.js
Normal file
@@ -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
0100.пример.js
Normal file
52
0100.пример.js
Normal file
@@ -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);
|
||||||
|
мир.запустить();
|
||||||
118
index.html
118
index.html
@@ -17,121 +17,7 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script>
|
<script src="0001.мир.js"></script>
|
||||||
var мир = {};
|
<script src="0100.пример.js"></script>
|
||||||
мир.строкаПути = 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>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user