通过反序列化创建对象的最佳方法。
我正在寻找从序列化数据创建对象时的好方法。我们假设有一个像这样定义的对象:
function A()
{}
A.prototype.a = "";
和序列化数据:“a”。 那么哪种方法会更好,为什么:
A.deserialize = function( data )
{
var a = new A();
a.a = data;
return a;
}
将被称为:
var a = A.deserialize("a");
A.prototype.deserialize = function ( data )
{
this.a = data;
}
它会像那样被调用
var a = new A();
a.deserialize( "a" );
function A(data)
{
this.a = data;
}
考虑数据可以是不同的类型,例如 - string,json或ArrayBuffer。 我正在寻找更通用的解决方案。有什么问题我会创建对象吗?
答案 0 :(得分:0)
我编写了这个jquery函数,可以很容易地序列化任何表单数据。
$.fn.serializeObject = function () {
var result = {};
this.each(function () {
var this_id = (this.id.substring(this.id.length - 2) == '_s') ? this.id.substring(0, this.id.length - 2) : this.id.replace('_val', '');
if (this.type == 'radio') {
var this_id = this.name;
result[this_id.toLowerCase()] = $('input[name=' + this_id + ']:checked').val();
}
else if (this.type == 'checkbox') {
result[this_id.toLowerCase()] = $('#' + this_id).prop('checked');
}
else {
if (this_id.indexOf('___') > -1) {
this_id = this_id.substring(0, this_id.indexOf('___'));
}
result[this_id.toLowerCase()] = this.value;
}
});
return result;
};
你可以通过var form_vars = $('#div input,#div select,#div textarea')轻松调用它.serializeForm()
您可以通过执行form_vars.property ='value';向对象添加其他属性,您甚至可以向其添加js数组和json对象。然后你可以使用$ .ajax提交。
答案 1 :(得分:0)
您可以使用通用解决方案(de)将其他对象序列化为JSON,并使用它来创建实用程序功能。请点击How to serialize & deserialize Javascript objects?
了解更多信息如果您希望自己反序列化每个对象类型。
静态方法方法
优点:
原型方法方法
缺点:
在构造函数中处理数据
缺点: