LINUX.ORG.RU

[javascript][serialization][code] Есть какой-то костыль?


0

1

Обычная сериализация в json это конечно прекрасно, но надо не совсем это. В общем допустим у нас есть объект, допустим этот объект целое дерево объектов. Допустим в нём есть как данные, так и методы. Вот хочется взять его, упаковать вместе с методами и потом распаковать где-нибудь и запустить. Про кучу подводных камней типа уж точно не работающих замыканий и вообще разные доступные контексты - не напоминать, это и ежу понятно. Предположим, что все методы работают _только_ с теми данными, которые есть в объекте. Костыль такой конечно навоять можно, но вдруг уже навояли, вдруг там ещё в чьей-то реализации заволялась возможность упаковывать в объект те объекты, на которых в свойствах есть лишь ссылки.

★★★

В общем чтобы можно было так примерно:
[code]
var obj_inline = new Object();
obj_inline.a = «Так точно»;
var obj = new Object();

obj.d = obj_inline;
obj.a = 15;
obj.b = «Не быковать»;
obj.c = function(str){
return this.b + str + this.d.a;
}

var serial_obj = MAGICSERIALIZER.stringify(obj);

var copy_obj = MEGICSERIALIZER.parse(serial_obj);
copy_obj.c('Молю');
[/code]

ixrws ★★★ ()
Ответ на: комментарий от anonymous

var http = require('http'); забыл удолить. ну да пофик

anonymous ()
Ответ на: комментарий от anonymous

вобщем предыдущая паста тоже работает.

какбе файнал-файнал версия

function cShit() {
    this.a = 13;
    this.b = '666';
    this.c = function(m) {
        var t1 = ''+m+' '+this.a+'/'+this.b+'!';
        var t2 = t1.length;
        var t3 = new Array(t2+3).join('*');
        console.log('\n/'+t3+'\\\n| '+t1+' |\n\\'+t3+'/\n');
    }
}
var shit = new cShit();

var crap = MYJSON.stringify(shit, null, 4);
console.log(crap + '\n');

var restored_shit = MYJSON.myparse(crap);
console.log(restored_shit);
restored_shit.c('heil');

результат

{
    "a": 13,
    "b": "666",
    "c": function (m) {
        var t1 = ''+m+' '+this.a+'/'+this.b+'!';
        var t2 = t1.length;
        var t3 = new Array(t2+3).join('*');
        console.log('\n/'+t3+'\\\n| '+t1+' |\n\\'+t3+'/\n');
    }
}

{ a: 13, b: '666', c: [Function] }

/**************\
| heil 13/666! |
\**************/

anonymous ()
Ответ на: комментарий от anonymous

Пасибо за труды:) Хотя это и значит, что костыль будет свой, пусть в данном случае и ваш, это не суть:)

ixrws ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.