Vue源码(一)

2 篇文章 0 订阅

Vue

走core/index.js 核心代码
走 import Vue from ‘./instance/index’

初始构造函数

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)
}

初始化的Vue构造函数,啥都没有
主要就做了一件事,检测Vue是否被new,有无实例产生
然后是_init,这个实例不存在这个方法,所以应该在原型链上
下面有一个initMixin(Vue),走import { initMixin } from ‘./init’

在原型链上添加_init

Vue.prototype._init = "函数代码"
vm._uid = uid++;//在_init函数中调用
//uid是闭包变量,定义在init.js模块全局中

performance 开发环境和浏览器下且存在performance API,可以使用performance API进行性能记录
window.performance.getEntriesByType(‘mark’) 查看历史记录

vm._isVue = true
添加vue标识

//判断是否是组件,不是的话,就是整体实例化
vm.$options = mergeOptions(
  resolveConstructorOptions(vm.constructor),//解析构造函数的配置项
  options || {},
  vm
)
//非生产环境已经开始使用Proxy了
if (process.env.NODE_ENV !== 'production') {
      initProxy(vm)
    } else {
      vm._renderProxy = vm
    }
//带一个自身属性
vm._self = vm
//初始化生命周期
initLifecycle(vm)
//初始化事件
initEvents(vm)
//初始化渲染
initRender(vm)
//触发创建前生命周期
callHook(vm, 'beforeCreate')
//注入(react简化版上下文)
initInjections(vm)
//初始化data/props/methods/computed/watch
initState(vm)
//提供子属性变量注入
initProvide(vm)
//触发创建成功生命周期
callHook(vm, 'created')

在创建前 初始化了生命周期/初始化事件/初始化渲染
在创建完成前初始化了注入,变量和方法,向子元素注入

//如果配置了el,则挂载到页面
if (vm.$options.el) {
  vm.$mount(vm.$options.el)
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值