ref (ref) {
    if (!ref) throw new Error('Illegal argument')
    // Attention: only the owner should create a ref()
    // unfortunately, with the current implementation this can not be ensured
    if (this._ref) throw new Error('A VirtualElement can only be referenced once.')
    this._ref = ref
    if (this._context) {
      const refs = this._context.refs
      if (refs.has(ref)) {
        throw new Error('An item with reference "' + ref + '" already exists.')
      }
      refs.set(ref, this)
    }
    return this
  }
Associates a reference identifier with this element.

    When rendered the corresponding component is stored in the owner using the given key.
    In addition to that, components with a reference are preserved when its parent is rerendered.

    > Attention: only the owner should use this method, as it only
      affects the owner's references

    @param {String} ref id for the compiled Component