defs() {
      const svg = this._svg,
        defs = this._defs;
      let el = defs.el,
        index = 0;
      for (const id in defs.gradient) {
        if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);
        index = updateGradient(el, defs.gradient[id], index);
      }
      for (const id in defs.clipping) {
        if (!el) defs.el = el = domChild(svg, RootIndex + 1, 'defs', svgns);
        index = updateClipping(el, defs.clipping[id], index);
      }

      // clean-up
      if (el) {
        index === 0 ? (svg.removeChild(el), defs.el = null) : domClear(el, index);
      }
    }
Render SVG defs, as needed.
Must be called *after* marks have been processed to ensure the
collected state is current and accurate.