• Vue2源码解读(5)


    vue.use 使用及实现原理

    Vue.use( plugin )

    • 参数:
      • plugin: { object | Function}

    做什么的?

    • vue全局注册插件的方法

    用法

    如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install方法调用时,会将 Vue 作为参数传入

    1. 该方法需要在调用 new Vue() 之前被调用。
    2. install 方法被同一个插件多次调用,插件将只会被安装一次

    注意以上俩点,我们看源码是怎么实现的!

    实现原理 - 源码

    源码位置: src/core/global-api/use.js

    import { toArray } from '../util/index'
    
    // 将 `Vue` 作为参数传入
    export function initUse (Vue: GlobalAPI) {
        // 插件传入类型为 Function 或 Object
      Vue.use = function (plugin: Function | Object) {
        // 先声明一个installedPlugins数组, 用来存放安装过的插件
        const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
          // 当新的插件注册后,首先判断缓存的数组中有没有
        if (installedPlugins.indexOf(plugin) > -1) {
          // 如果有 直接返回 vue实例, 防止重复安装。 也就是上面用法中的第2点
          return this
        }
    
        // 附加参数处理
        // 将其他参数都通过toArray方法转化成数组
        const args = toArray(arguments, 1)
        // 然后将vue实例放到数组的第一个位置,后续调用install方法都必须传入vue作为参数
        args.unshift(this)
        // 如果传入的plugin的install方法是一个函数
        if (typeof plugin.install === 'function') {
            // 那就把参数传入并执行
          plugin.install.apply(plugin, args)
           // 如果传入的 plugin 是方法那就直接执行
        } else if (typeof plugin === 'function') {
          plugin.apply(null, args)
        }
        // 把插件存在数组中
        installedPlugins.push(plugin)
        // 返回 vue 实例
        return this
      }
    }
    
    // toArray方法  src/shared/util.js 这个里面有好多工具函数,可以参考使用
    // 将类数组对象转换为真正的数组.
    export function toArray (list: any, start?: number): Array<any> {
        start = start || 0
        let i = list.length - start
        const ret: Array<any> = new Array(i)
        while (i--) {
            ret[i] = list[i + start]
        }
        return ret
    }
    
  • 相关阅读:
    L1-049 天梯赛座位分配​​​​​​​
    L1-046 整除光棍 大数除法
    天梯赛 L1-043 阅览室
    Hdu 1022 Train Problem I 栈
    蓝桥杯 历届试题 格子刷油漆  (动态规划)
    第九届蓝桥杯省赛真题 日志统计
    2018年第九届蓝桥杯第7题 螺旋折线
    2018年第九届蓝桥杯省赛 递增三元组
    蓝桥杯 历届试题 高僧斗法  (尼姆博弈)
    K-th Number
  • 原文地址:https://www.cnblogs.com/shizk/p/15465190.html
Copyright © 2020-2023  润新知