高阶组件就是 一个函数承受一个纯对象,并且返回一个新纯对象
高阶组件:console.js

function Console (Base) {  return {    mounted () {      console.log('haha')    },    props: Base.props,    render (h) {      const slots = Object.keys(this.$slots)        .reduce((arr, key) => arr.concat(this.$slots[key]), [])        // 手动更正 context        .map(vnode => {          vnode.context = this._self //绑定到高阶组件上          return vnode        })       return h(WrappedComponent, {        on: this.$listeners,        props: this.$props,        attrs: this.$attrs      }, slots)    }  }}

高阶组件应用:

<template>  <div>    <span @click="handleClick">props: {{test}}</span>    <slot name="slot1"/> <!-- 具名插槽 --></slot>    <p>===========</p>    <slot><slot/> <!-- 默认插槽 -->  </div></template> <script>export default {  ...}</script><template>  <div>    <Base>      <h2 slot="slot1">BaseComponent slot</h2>      <p>default slot</p>    </Base>    <wrapBase>      <h2 slot="slot1">EnhancedComponent slot</h2>      <p>default slot</p>    </wrapBase>  </div></template> <script>  import Base from './Base.vue'  import hoc from './Console.js'   const wrapBase = Console(Base)   export default {    components: {      Base,      wrapBase    }  }</script>