code: function JSZip(data, options) {
      // if this constructor isÂ used withoutÂ `new`, itÂ adds `new` beforeÂ itself:
      if(!(this instanceof JSZip)) return new JSZip(data, options);
  
      // object containing the files :
      // {
      //   "folder/" : {...},
      //   "folder/data.txt" : {...}
      // }
      this.files = {};
  
      // Where we are in the hierarchy
      this.root = "";
      if (data) {
          this.load(data, options);
      }
      this.clone = function() {
          var newObj = new JSZip();
          for (var i in this) {
              if (typeof this[i] !== "function") {
                  newObj[i] = this[i];
              }
          }
          return newObj;
      };
  }
docs: Usage:
  zip = new JSZip();
  zip.file("hello.txt", "Hello, World!").file("tempfile", "nothing");
  zip.folder("images").file("smile.gif", base64Data, {base64: true});
  zip.file("Xmas.txt", "Ho ho ho !", {date : new Date("December 25, 2007 00:00:01")});
  zip.remove("tempfile");
  
  base64zip = zip.generate();
  
   
  Representation a of zip file in js
  @constructor
  @param {String=|ArrayBuffer=|Uint8Array=} data the data to load, if any (optional).
  @param {Object=} options the options for creating this objects (optional).