xwjie/VueStudyNote

09 支持插件

xwjie opened this issue · 0 comments

xwjie commented

实现

比较简单,增加一个全局变更,增加一个static方法use

主要是函数 apply用法

// 全局插件
const globalPlugins: Array<Function | Object> = []

class Xiao{

  // 其他代码

  /**
   * 插件安装指令
   */
  // D:\OutPut\VUE\vue\src\core\global-api\use.js
  static use(plugin: Function | Object) {
    if (globalPlugins.indexOf(plugin) > -1) {
      return
    }

    //fixme additional parameters
    const args = toArray(arguments, 1)
    args.unshift(Xiao) //放到第一个位置

    if (typeof plugin.install === 'function') {
      plugin.install.apply(Xiao, args)
    } else if (typeof plugin === 'function') {
      plugin.apply(Xiao, args)
    }

    globalPlugins.push(plugin)
  }
}

插件可以直接传入一个函数,或者一个包含 install 函数的对象。