zoukankan      html  css  js  c++  java
  • vuejs随笔小结

    1./core/util/perf.js

    import { inBrowser } from './env'  //运行环境在浏览器为true
    
    export let mark           //window.performance.mark
    export let measure      //重写了window.performance.measure函数

    2./core/utils/options.js

    // 对option[key]进行策略处理,默认不处理
    function mergeField (key) {
        const strat = strats[key] || defaultStrat
        options[key] = strat(parent[key], child[key], vm, key)
      }

    3.插件的写法Vue.use

    这段源码简单,global-api/use.js中,this._installedPlugins储存插件的数组。

    export function initUse (Vue: GlobalAPI) {
      Vue.use = function (plugin: Function | Object) {
        const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
       // 已经执行过了插件暴露的方法就不需要执行了
        if (installedPlugins.indexOf(plugin) > -1) {
          return this
        }
        // additional parameters,  args忽略第一个参数。
        const args = toArray(arguments, 1)
        args.unshift(this)
        // 第一个参数是vue本身了
        if (typeof plugin.install === 'function') {
        // 插件要实现install函数,或者本身就是函数,
          plugin.install.apply(plugin, args)
        } else if (typeof plugin === 'function') {
          plugin.apply(null, args)
        }
        installedPlugins.push(plugin)
        return this
      }

    4. 事件修饰符~,!

    5.vue的代码写法

    先是给Vue这个函数(对象)原型赋值,然后是静态方法定义,如下:

     //Vue类
    function Vue (options) {
      if (process.env.NODE_ENV !== 'production' &&
        !(this instanceof Vue)
      ) {
        warn('Vue is a constructor and should be called with the `new` keyword')
      }
      this._init(options)
    }
    
    initMixin(Vue)      //Vue.prototype._init赋值。初始化Vue对象时,会调用_init函数
    stateMixin(Vue)    //原型赋值 $set、$delete、$watch、$data、$props
    eventsMixin(Vue)  //原型赋值 on once off emit
    lifecycleMixin(Vue) //forceUpdate,destroy ,_update
    renderMixin(Vue)   //$nextTick和_render,和对Vue.protoype对象赋值大量的私有变量,如:

      target._o = markOnce
      target._n = toNumber
      target._s = toString
      target._l = renderList
      target._t = renderSlot
      target._q = looseEqual
      target._i = looseIndexOf
      target._m = renderStatic
      target._f = resolveFilter
      target._k = checkKeyCodes
      target._b = bindObjectProps
      target._v = createTextVNode
      target._e = createEmptyVNode
      target._u = resolveScopedSlots
      target._g = bindObjectListeners
      target._d = bindDynamicKeys
      target._p = prependModifier

      

  • 相关阅读:
    Delphi XE5 for Android (六)
    Delphi XE5 for Android (四)
    Delphi XE5 for Android (三)
    如何设计并使用FireMonkeyStyle
    Indy发送邮件被kbas退掉
    Indy10收发Hotmail邮件
    一个简单的打印监控示例
    DataSnap侦听端口动态设置问题
    面试题总结一
    spring boot RESTFul API拦截 以及Filter和interceptor 、Aspect区别
  • 原文地址:https://www.cnblogs.com/liuyinlei/p/9125998.html
Copyright © 2011-2022 走看看