vue2源码浏览分析01
1.构造函数 Vue$3
- function Vue$3 (options) {
- if ("development" !== 'production' &&
- !(this instanceof Vue$3)) {
- warn('Vue is a constructor and should be called with the `new` keyword');
- }
//执行初始化方法- this._init(options);
- }
- initMixin(Vue$3);
- stateMixin(Vue$3);
- eventsMixin(Vue$3);
- lifecycleMixin(Vue$3);
- renderMixin(Vue$3);
//设置原型
- initGlobalAPI(Vue$3);
//绑定数据到构造函数上
- Vue$3.version = '2.2.2';
- Vue$3.config.mustUseProp = mustUseProp; //必须使用的的props
Vue$3.config.isReservedTag = isReservedTag; //是否是本地htmlht svg
Vue$3.config.getTagNamespace = getTagNamespace; // 是否是svg math
Vue$3.config.isUnknownElement = isUnknownElement; //是否是未知标签 替换HTMLUnknownElement
//设置config配置
- extend(Vue$3.options.directives, platformDirectives); //绑定默认的两个指令到全局 v-model,v-show
extend(Vue$3.options.components, platformComponents); //绑定默认的两个组件到全局 transition ,transitionGroup
//设置directives 和 components
- Vue$3.prototype.__patch__ = inBrowser ? patch : noop;
//其他函数
- Vue$3.prototype.$mount = function (el, hydrating) { //挂载的方法
el = el && inBrowser ? query(el) : undefined;
return mountComponent(this, el, hydrating)
};
//绑定$mount方法
- Vue$3.compile = compileToFunctions; //将template 转换为 rander对象中 可以执行函数
//设置编译函数
- initGlobalAPI(Vue$3);
- //在 Vue 的构造函数添加方法和属性,提供全局变量和函数
function initGlobalAPI (Vue) {- var configDef = {};
- configDef.get = function () { return config; };
- {
- configDef.set = function () {
- warn(
- 'Do not replace the Vue.config object, set individual fields instead.'
- );
- };
- }
//设置 Vue 的config属性- Object.defineProperty(Vue, 'config', configDef);
- Vue.util = {
- warn: warn, //错误提示函数,传入msg和vm
- extend: extend, //简单的扩展方法
- mergeOptions: mergeOptions, // 合并初始化的参数,并执行之心合并策略
- defineReactive: defineReactive$$1 //
- };
- Vue.set = set; //定义set方法,在(target,key,val) 在target上定义属性,如果该属性被观察则更新数据
- Vue.delete = del; //定义del方法 在(target,key) 删除key属性 ,如果该属性呗观察,则更新数据
- Vue.nextTick = nextTick; //绑定延时程序,数据改变后观察数据变化
- Vue.options = Object.create(null); //绑定 Vue 构造函数的 options
- config._assetTypes.forEach(function (type) {
- Vue.options[type + 's'] = Object.create(null); //绑定 compontnents , dereactors , filters对象 到构造函数options上
- });
- Vue.options._base = Vue; // 将构造函数的options._base指向 Vue
- extend(Vue.options.components, builtInComponents); //合并本地的 KeepAlive 到 构造函数的options.components中
- defineReactive$$1
- function defineReactive$$1 (obj, key, val, customSetter) {
- //创建一个观察队列 用来存储当该数据改变时候要触发的对象,或者数据
- var dep = new Dep();
- var property = Object.getOwnPropertyDescriptor(obj, key);
- if (property && property.configurable === false) {
- return
- }
- //获取 js 中的访问器 get/set
- var getter = property && property.get;
- var setter = property && property.set;
//创建或返回一个 __ob__- var childOb = observe(val);
- Object.defineProperty(obj, key, { //给当前对象重新定义 get/set 方法,当对象被重新设置set方法时候 触发 所有依赖该数据的 数据更新 __ob__
- enumerable: true,
- configurable: true,
- get: function reactiveGetter () {
- var value = getter ? getter.call(obj) : val;
- if (Dep.target) {
- dep.depend();
- if (childOb) {
- childOb.dep.depend();
- }
- if (Array.isArray(value)) {
- dependArray(value);
- }
- }
- return value
- },
- set: function reactiveSetter (newVal) {
- var value = getter ? getter.call(obj) : val;
- /* eslint-disable no-self-compare */
- if (newVal === value || (newVal !== newVal && value !== value)) {
- return
- }
- /* eslint-enable no-self-compare */
- if ("development" !== 'production' && customSetter) {
- customSetter();
- }
- if (setter) {
- setter.call(obj, newVal);
- } else {
- val = newVal;
- }
- childOb = observe(newVal); //给新的数据添加监听__ob__
- dep.notify(); // 更新所有依赖该数据的数据
- }
- });
- }
- initUse(Vue); //绑定 Vue.use(obj) 函数,安装插件 插件对象obj必须有 install 属性
- initMixin$1(Vue); //绑定 Vue.mixin(obj) 将绑定的 直接合并到 options 上面
- initExtend(Vue); //创建一个集成 Vue 的子类,用于创建公共的自定义 组件构造函数类
- initAssetRegisters(Vue); } //绑定Vue.component , Vue,dereactor , Vue.filter 方法,用于注册 组件,指令,过滤器 并添加到 构造函数的options中
- 大部分是绑定到 Vue 的构造函数上面,为全局方法和属性。
http://www.cnblogs.com/jiebba/p/6544084.html
个人博客 :很多好用的 npm 包 , 可以看看 https://gilea.cn/
http://www.cnblogs.com/jiebba 我的博客,来看吧!
如果有错误,请留言修改下 哦!
vue2源码浏览分析01的更多相关文章
- vue2源码浏览分析02
1.组件初始化方法 init Vue.prototype._init = function (options) { /* istanbul ignore if */ if ("develop ...
- Spring IOC 源码简单分析 01 - BeanFactory
### 准备 ## 目标 了解 Spring IOC 的基础流程 ## 相关资源 Offical Doc:http://docs.spring.io/spring/docs/4.3.9.RELEASE ...
- Vue2源码分析-逻辑梳理
很久之前就看完vue1,但是太懒就一直没写博客,这次打算抽下懒筋先把自己看过了记录下来,否则等全部看完,估计又没下文了 看源码总需要抱着一个目的,否则就很难坚持下去,我并没做过vue的项目,我几乎很少 ...
- JUC同步器框架AbstractQueuedSynchronizer源码图文分析
JUC同步器框架AbstractQueuedSynchronizer源码图文分析 前提 Doug Lea大神在编写JUC(java.util.concurrent)包的时候引入了java.util.c ...
- 自定义View系列教程03--onLayout源码详尽分析
深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...
- 自定义View系列教程02--onMeasure源码详尽分析
深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...
- MapReduce的ReduceTask任务的运行源码级分析
MapReduce的MapTask任务的运行源码级分析 这篇文章好不容易恢复了...谢天谢地...这篇文章讲了MapTask的执行流程.咱们这一节讲解ReduceTask的执行流程.ReduceTas ...
- Activity源码简要分析总结
Activity源码简要分析总结 摘自参考书籍,只列一下结论: 1. Activity的顶层View是DecorView,而我们在onCreate()方法中通过setContentView()设置的V ...
- MapReduce的MapTask任务的运行源码级分析
TaskTracker任务初始化及启动task源码级分析 这篇文章中分析了任务的启动,每个task都会使用一个进程占用一个JVM来执行,org.apache.hadoop.mapred.Child方法 ...
随机推荐
- ACM_求N^N的前5位数和后5位数(数论)
NNNNN Time Limit: 2000/1000ms (Java/Others) Problem Description: 对于整数N,求N^N的前5位和后5位(1057题加强版) Input: ...
- Java对象简单实用(计算器案例)
对 Java中的对象与属性,方法的使用,简单写了个案例 import java.util.Scanner; class Calculste { int a; //定义两个整数 int b; Strin ...
- C#与正则表达式的例子
一个很好的文章,但是并没有测试 连接
- CF817B Makes And The Product
思路: 模拟,数学. 实现: #include <iostream> #include <cstdio> #include <algorithm> using na ...
- offset家族基本简介
Offset家族简介 offset这个单词本身是--偏移,补偿,位移的意思. js中有一套方便的获取元素尺寸的办法就是offset家族: offsetWidth和offsetHight 以及offse ...
- Android 五种方式实现Android底部导航栏
https://segmentfault.com/a/1190000007697941
- 扩增子分析QIIME2-3数据导出Exporting data
# 激活工作环境 source activate qiime2-2017.8 # 建立工作目录 mkdir -p qiime2-exporting-tutorial cd qiime2-exporti ...
- 类似倒圆角方法输入半径选择实体 kword
ads_name ename; ads_point adspt; acedInitGet(NULL, TEXT("R")); while (1) { int rc = acedEn ...
- CAD从二进流加载数据(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::ReadBinStreamEx 从二进流加载数据,详细说明如下: 参数 说明 IMxDrawBinStream* pBinStream ...
- 数据导出为Excel(未完)
更多详细内容 view页面: function Download() { //多个查询条件 dateStart = $("#j_dataTimeStart").datebox(&q ...