Vue源码解析-new Vue都干了些啥

前言

new Vue都干了些啥,估计很多面试都会问到,文章也看过,但是还是想自己扒扒源码看看究竟,因为之前看Vue代码用的都是2.x的,这次也跟着用2.6.11,vue3的留之后吧,现在真的有点卷不动了。

解析Vue入口

一般源码都是从index开始的,看源码的时候要一部分一部分地看,一次性想看完会极度难受,而且这是一件不可能的事,这篇文章就只分析一下new Vue。Vue的入口是在vue/src/core/index.js里,代码如下:

import Vue from './instance/index'
import {
    initGlobalAPI } from './global-api/index'
import {
    isServerRendering } from 'core/util/env'
import {
    FunctionalRenderContext } from 'core/vdom/create-functional-component'

initGlobalAPI(Vue)

Object.defineProperty(Vue.prototype, '$isServer', {
   
  get: isServerRendering
})

Object.defineProperty(Vue.prototype, '$ssrContext', {
   
  get () {
   
    /* istanbul ignore next */
    return this.$vnode && this.$vnode.ssrContext
  }
})

// expose FunctionalRenderContext for ssr runtime helper installation
Object.defineProperty(Vue, 'FunctionalRenderContext', {
   
  value: FunctionalRenderContext
})

Vue.version = '__VERSION__'

export default Vue

代码里可以看到Vue是从vue/src/core/instance/index里面引用过来的,也对引用过来的Vue进行了一些操作,比如initGlobalAPI,这名字一看就是初始化全局api的,应该是例如一些$set之类的全局钩子,然后还判断了一下是不是ssr,对ssr做了一些处理,这个不是重点,主要是找着Vue的入口。
打开vue/src/core/instance/index,代码如下:

import {
    initMixin } from './init'
import {
    stateMixin } from './state'
import {
    renderMixin } from './render'
import {
    eventsMixin } from './events'
import {
    lifecycleMixin } from './lifecycle'
import {
    warn } from '../util/index'

// new Vue()调用的其实是这个函数,这个函数里面判断了一下环境,如果是非生产环境下没有使用ne
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值