constructor (owner) {
    this.owner = owner
    // used to track refs created via `el.ref()`
    this.refs = new Map()
    // used to keep refs that are set by a different owner, when a component is
    // passed via props
    this.foreignRefs = new Map()
    // all VirtualElements created such as `$$('div')`
    this.elements = []
    // all VirtualComponents created such as `$$(Foo)`
    this.components = []
    // all VirtualComponents that are appended but not owned, i.e. injected from parent
    this.injectedComponents = []
    this.$$ = this._createElement.bind(this)
    this.$$.capturing = true
  }
Create a virtual DOM representation which is used by Component
  for differential/reactive rendering.

  @param elementType HTML tag name or Component class
  @param [props] a properties object for Component classes
  @return {VirtualElement} a virtual DOM node

  @example

  Create a virtual DOM Element

  ```
  $$('a').attr({href: './foo'}).addClass('se-nav-item')
  ```

  Create a virtual Component

  ```
  $$(HelloMessage, {name: 'John'})
  ```