zoukankan      html  css  js  c++  java
  • new Vue()做了什么?

    Vue.prototype._init = function (options?: Object) {
        // a flag to avoid this being observed
        vm._isVue = true
        // merge options
        if (options && options._isComponent) {
          // optimize internal component instantiation
          // since dynamic options merging is pretty slow, and none of the
          // internal component options needs special treatment.
          initInternalComponent(vm, options)
        } else {
          vm.$options = mergeOptions(
            resolveConstructorOptions(vm.constructor),
            options || {},
            vm
          )
        }
        /* istanbul ignore else */
        if (process.env.NODE_ENV !== 'production') {
          initProxy(vm)
        } else {
          vm._renderProxy = vm
        }
        // expose real self
        vm._self = vm
        initLifecycle(vm)
        initEvents(vm)
        initRender(vm)
        callHook(vm, 'beforeCreate')
        initInjections(vm) // resolve injections before data/props
        initState(vm)
        initProvide(vm) // resolve provide after data/props
        callHook(vm, 'created')
        if (vm.$options.el) {
          vm.$mount(vm.$options.el)
        }
      }
    
    
    1. initProxy,作用域代理,拦截组件内访问其它组件的数据。
    2. initLifecycle建立父子组件关系,在当前实例上添加一些属性和生命周期标识。如: $children $refs_isMounted 等。
    3. initEvents 用来存放除 @hook:生命周期钩子名称="绑定的函数"事件的对象。如: $on $emit 等。
    4. initRender 用于初始化 $slots $attrs $listeners
    5. initInjections初始化 inject ,一般用于更深层次的组件通信,相当于加强版子组件的 props 。用于组件库开发较多。
    6. initState 是很多选项初始化的汇总,包括: props 、methods 、data 、computedwatch 等。
    7. initProvide 初始化 provide
    8. vm.$mount挂载实例。

  • 相关阅读:
    装饰者模式
    Linux 编译的一些注意参数
    CodeBlocks使用静态链接库
    [BOOST] BOOST::String
    [BOOST] BOOST::Regex
    如何启动仿真环境里的网络联接?
    BlackCore
    Silverlight 中为Dialog添加委托
    c# windows应用程序或C# 控制台应用程序 添加web引用步骤
    Hyperv Server Q&A
  • 原文地址:https://www.cnblogs.com/smzd/p/12303306.html
Copyright © 2011-2022 走看看