从反序列化创建对象的最佳方法

时间:2014-02-05 14:21:50

标签: javascript

通过反序列化创建对象的最佳方法。

我正在寻找从序列化数据创建对象时的好方法。我们假设有一个像这样定义的对象:

function A()
{}
A.prototype.a = "";

和序列化数据:“a”。 那么哪种方法会更好,为什么:

1。创建静态方法反序列化:

    A.deserialize = function( data )
    {
        var a = new A();
        a.a = data;
        return a;
    }

将被称为:

var a = A.deserialize("a");

2。在原型中创建方法

A.prototype.deserialize = function ( data )
{
    this.a = data;
}

它会像那样被调用

 var a = new A();
 a.deserialize( "a" );

3。在contstructor中处理数据

function A(data) 
{ 
   this.a = data; 
}

考虑数据可以是不同的类型,例如 - string,json或ArrayBuffer。 我正在寻找更通用的解决方案。有什么问题我会创建对象吗?

2 个答案:

答案 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?

了解更多信息

如果您希望自己反序列化每个对象类型。

静态方法方法

优点:

  • 静态方法可以干净地处理整个对象的创建和设置值,而不会创建任何不必要的临时对象等。到目前为止最清洁的解决方案。
  • 此方法不要求对象了解序列化过程,并且可以轻松添加到现有解决方案中

原型方法方法

缺点:

  • 此变体污染原型链。
  • 您必须创建一个对象,以便创建一个对象,除非您想用它从内部填充它。如果构造函数中存在需要执行的逻辑,那么这可能会有问题。

在构造函数中处理数据

缺点:

  • 构造函数需要重载。如果传递给构造函数的数据是正常数据或序列化数据,则很难识别。例如通常它需要一些字符串和序列化数据也是字符串。