vue2 源码解析-逐行解析
文章平均质量分 51
闲着没事,研究vue2源码,逐行打注释,希望大家都能看的懂
丰的传说
一个有点编程思想的web前端工程师
展开
-
vue2源码分析-vue入口文件global-api分析
vue 全局api初始化 vue挂载的全局属性: vue.util 公共方法,set 方法 ,del方法, nextTick方法,observable observe方法,options vue的一些选项。初始化方法: extend,extend函数此处用于扩展,initUse 初始化插件,initMixin 初始化混入,initExtend,构造一个vue的子类 ,initAssetRegisters(Vue) 注册或者获取全局组件、指令、过滤器原创 2024-03-06 15:20:25 · 608 阅读 · 0 评论 -
vue源码分析之nextTick源码分析-逐行逐析-个人困惑
vue源码解析之 nextTick源码解析,nextTick底层实现 promise,MutationObserver,setImmediate,setTimeout原创 2024-02-22 21:06:25 · 589 阅读 · 1 评论 -
vue2源码调试,在vscode中直接调试vue源代码操作指南
vscode借助 Microsoft Edge Tools for VS Code 实现源码直接在vscode中的调试,分析如何在vscode中进行断点的添加原创 2024-02-10 16:35:47 · 3213 阅读 · 0 评论 -
Vue2.0 源码解析 003 之入门 AST 语法树转换为render函数
const defautTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;function genProps(attrs) { //属性处理 将属性的键值拼接成字符串 let str = ""; for (let i = 0; i < attrs.length; i++) { let attr = attrs[i]; if (attr.name == "style") { //如果属性的名称是style 那么可能会有多个键值 如 styl.原创 2022-04-06 17:01:26 · 1087 阅读 · 0 评论 -
Vue2.0 源码解析 003 之入门 将模板转化成ast语法树
什么是AST语法树用于描述dom结构的一种树状的数据结构如下图所示AST语法树于虚拟dom的关系如何将模板节点转换成AST代码总览const ncname = `[a-zA-Z_][\\-\\.0-9_a-zA-Z]*`; // aa-aaconst qnameCapture = `((?:${ncname}\\:)?${ncname})`; //aa:aa/* ?: 匹配不捕获*/const startTagOpen = new RegExp(`^<原创 2022-04-06 15:38:00 · 581 阅读 · 0 评论 -
vue源码解析 002 双向数据绑定时 数据类型为数组的处理
为什么要重写数组方法触发视图更新如果数据类型是对象的时候,可以使用object.defineProperty实现对数据的监监听但是当数据类型是数组的时候,如果有成千上万条数据呢,每个数据都进行监听,就太消耗性能了,所有我们重写了改变原数组的方法,在调用这些方法时触发更新数据监听的index.js文件import { arrayMethods } from "./array";class Observer { constructor(value) { console.l原创 2022-04-05 23:00:05 · 1087 阅读 · 0 评论 -
Vue2.0 源码解析 001 之入门 初始化项目
入口文件 index.jsimport { initMixin } from "./init";function Vue(options){ console.log(options); this._init(options)//当用户new vue时 就调用init方法进行vue的初始化方法}// 可以拆分逻辑到不同的文件中,更利于代码维护 模块化的概念initMixin(Vue)export default Vue入口文件初始化项目初始化项目文件 init.原创 2022-04-05 16:01:11 · 944 阅读 · 0 评论 -
vue2.0 源码解析 initProxy 初始化代理
export function makeMap( str: string, expectsLowerCase?: boolean): (key: string) => true | void { debugger/* makeMap expectsLowerCase? 此处表示可选参数 a?.b 如果无法确定a 是否为空 则需要使用 a?.b 表示a 有值时才访问 b属性,没有值的时候不去访问*/ const map = Object.create(nu.原创 2021-10-31 15:28:23 · 274 阅读 · 0 评论 -
vue 源码解析之 makeMap 函数
export function makeMap( str: string, expectsLowerCase?: boolean): (key: string) => true | void { debugger/* makeMap expectsLowerCase? 此处表示可选参数 a?.b 如果无法确定a 是否为空 则需要使用 a?.b 表示a 有值时才访问 b属性,没有值的时候不去访问*/ const map = Object.create(nu.原创 2021-10-31 15:14:40 · 531 阅读 · 0 评论 -
Vue 源码感悟之 判断代码运行环境
Vue 源码所在目录src\core\util\env.js代码研究成果/* @flow */// can we use __proto__?export const hasProto = '__proto__' in {}// Browser environment sniffingexport const inBrowser = typeof window !== 'undefined'// 判断是否在浏览器环境中运行export const inWeex = typeof原创 2021-10-30 21:27:08 · 575 阅读 · 0 评论 -
vue Template 转换为 ast 语法树的实现方法
抽象语法树介绍 vue在mount过程中,会将template编译成ast抽象语法树,是源代码的抽象语法结构的树状表现形式虚拟dom的实现思路vue 中使用了虚拟dom(vitrualdom),来模拟dom树,通过操作dom树数据来操作dom提高了dom操作的性能具体流程 template 转换成ast抽象语法树 ast抽象语法树再转换成 render函数 最终返回一个vnode具体代码const ncname = `[a-zA-Z_][\\-\\.0...原创 2021-09-11 17:08:46 · 1300 阅读 · 0 评论 -
vue 数据劫持原理
1,什么是 Object.definePropertyObject.defineProperty(obj,property,descriptor) 有三个参数 分别是 obj 对象 property 属性值 属性值 当前属性所拥有的特性descriptor 有如下属性get 获取值时触发 set 修改值时触发 enumerable 是否可枚举 如果值为false就不可以别for in Object.keys等循环 value 当前值 configurable 是否可修改...原创 2021-08-30 23:18:55 · 597 阅读 · 0 评论