Reconstitute JSON: jQuery extension

by danielzen

JavaScript

$.extend({
    deepTypeReset:function (obj) {
    for (var name in obj) {
      var elem = obj[name];
      if (typeof elem !== "undefined" && typeof elem._type !== "undefined") {
        var newElem = eval("new " + elem._type); //Security hole
        jQuery.extend(newElem, elem);
        obj[name] = newElem;
        $.deepTypeReset(newElem);
      }
    }
    if (typeof obj !== "undefined" && typeof obj._type !== "undefined") {
      var newObj = eval("new " + obj._type); //Security hol
      return jQuery.extend(newObj, obj);
    }
  }
});

function Glove(material, color) {
  this.material = material;
  this.color = color;
  this._type = "Glove";
}

Glovebox.prototype = [];
Glovebox.prototype.constructor = Glovebox;
function Glovebox(name) {
  this.name = name;
  this._type = "Glovebox"
};

Glovebox.prototype.howMany = function() {
  console.log("Has "+ this.length+" pairs in box");
};

var pair1 = new Glove("leather", "red");
var pair2 = new Glove("cotton", "black");

var box = new Glovebox();
box.push(pair1);
box.push(pair2);

var jsonString = JSON.stringify(box);
console.log(jsonString);    
console.log(box); 

var jsonObj = JSON.parse(jsonString);
var box2 = $.deepTypeReset(jsonObj)
console.log(box2);   
box2.howMany();
//console.log(typeof obj