function getSlots(children) {
  const slots = {}
  if (children == null) {
    return slots
  }
  if (!Array.isArray(children)) {
    children = [children]
  }
  children = children.filter(v => v != null)
  children.forEach(v => {
    if (typeof v === 'string' || typeof v === 'number' || v === null) {
      slots.default = slots.default || []
      slots.default.push(v)
    } else if (v.type === COMMON.template.type) {
      // data-slot renamed to dataSlot to fix named slot issue
      slots[v['dataSlot']] = slots[v['dataSlot']] || []
      slots[v['dataSlot']].push(v.render)
    } else if (v.props) {
      const dataSlot = v.props['dataSlot']
      if (dataSlot == null) {
        slots.default = slots.default || []
        slots.default.push(v)
      } else {
        slots[dataSlot] = slots[dataSlot] || []
        slots[dataSlot].push(v)
      }
    }
  })
  return slots
}
for 'this.$solts'
@param {this.props.children} children