Vue2.x源码分析(二):Vue实例挂载的实现

Vue源码分析 + 逐行注释 Github地址

Vue实例挂载阶段,这里只分析web平台的实现,web平台的入口文件是src/platforms/web/entry-runtime-with-compiler.js,在此文件中Vue通过$mount方法进行实例挂载。

Vue挂载阶段都做了什么?

src/platforms/web/entry-runtime-with-compiler.js文件$mount方法定义之前,$mount已经在runtime(src/platforms/web/runtime/index.js文件)里定义了一遍,在该文件里刚开始就对·$mount做一个缓存,缓存为mount变量,方便之后使用。

Vue2.x源码分析(一):new Vue发生了什么

Vue源码分析 + 逐行注释 Github地址

new Vue()做了什么?

首先,Vue会判断当前的this是否是Vue实例,如果是则会调用this._init()初始化Vue配置,如果不是则抛出警告

代码src/core/instance/index.js

1
2
3
4
5
6
7
8
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)
}

JS-Web-API(三):Ajax

XMLHttpRequest

GET请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 初始化实例
const xhr = new XMLHttpRequest()
// 第三个参数true则为异步
xhr.open('GET','url', true)
xhr.onreadystatechange = function () {
// 这里函数异步执行
if (xhr.readyState === 4) {
if (xhr.statusCode === 200) {
console.log(xhr.responseText)
} else {
console.log('请求失败')
}
}
}
xhr.send()

JS-Web-API(二):事件

事件绑定

1
2
3
4
const btn = document.getElementById('btn1')
btn.addEventListener('click', event => {
console.log('clicked')
})
1
2
3
4
5
6
7
8
9
10
// 通用的绑定函数
function bindEvent(elem, type, fn) {
elem.addEventListener(type, fn)
}

const a = document.getElementById('link1')
bindEvent(a, 'click', e => {
e.preventDefault() // 阻止默认行为
alert('clicked')
})

JS-Web-API(一):DOM与BOM

DOM

DOM的本质

DOM的本质是从html文件解析出来的树状数据结构

DOM节点操作

获取DOM节点

1
2
3
4
const div1 = document.getElementById('div1') // 获取一个元素
const divList = document.getElementsByTagName('div') // 获取一个元素集合
const containerList = document.getElementsByClassName('.container') // 集合
const pList = document.querySelectorAll('p') // 集合
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×