1.构造函数  Vue$3

  1. function Vue$3 (options) {
  2. if ("development" !== 'production' &&
  3. !(this instanceof Vue$3)) {
  4. warn('Vue is a constructor and should be called with the `new` keyword');
  5. }
      //执行初始化方法
  6. this._init(options);
  7. }

  

  1. initMixin(Vue$3);
  2. stateMixin(Vue$3);
  3. eventsMixin(Vue$3);
  4. lifecycleMixin(Vue$3);
  5. renderMixin(Vue$3);
    //设置原型

  

  1. initGlobalAPI(Vue$3);
    //绑定数据到构造函数上
  1. Vue$3.version = '2.2.2';
  1. 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配置
  1. extend(Vue$3.options.directives, platformDirectives); //绑定默认的两个指令到全局 v-model,v-show
    extend(Vue$3.options.components, platformComponents); //绑定默认的两个组件到全局 transition ,transitionGroup
    //设置directives 和 components
  1. Vue$3.prototype.__patch__ = inBrowser ? patch : noop;
    //其他函数
  1. Vue$3.prototype.$mount = function (el, hydrating) { //挂载的方法
    el = el && inBrowser ? query(el) : undefined;
    return mountComponent(this, el, hydrating)
    };
    //绑定$mount方法
  1. Vue$3.compile = compileToFunctions; //将template 转换为 rander对象中 可以执行函数
    //设置编译函数

  

  1. initGlobalAPI(Vue$3);
  1. //在 Vue 的构造函数添加方法和属性,提供全局变量和函数
    function initGlobalAPI (Vue) {
  2. var configDef = {};
  3. configDef.get = function () { return config; };
  4. {
  5. configDef.set = function () {
  6. warn(
  7. 'Do not replace the Vue.config object, set individual fields instead.'
  8. );
  9. };
  10. }
      //设置 Vue 的config属性
  11. Object.defineProperty(Vue, 'config', configDef);
  12. Vue.util = {
  13. warn: warn, //错误提示函数,传入msg和vm
  14. extend: extend, //简单的扩展方法
  15. mergeOptions: mergeOptions, // 合并初始化的参数,并执行之心合并策略
  16. defineReactive: defineReactive$$1 //
  17. };
  18.  
  19. Vue.set = set; //定义set方法,在(target,key,val) 在target上定义属性,如果该属性被观察则更新数据
  20. Vue.delete = del; //定义del方法 在(target,key) 删除key属性 ,如果该属性呗观察,则更新数据
  21. Vue.nextTick = nextTick; //绑定延时程序,数据改变后观察数据变化
  22.  
  23. Vue.options = Object.create(null); //绑定 Vue 构造函数的 options
  24. config._assetTypes.forEach(function (type) {
  25. Vue.options[type + 's'] = Object.create(null); //绑定 compontnents , dereactors , filters对象 到构造函数options上
  26. });
  27.  
  28. Vue.options._base = Vue; // 将构造函数的options._base指向 Vue
  29.  
  30. extend(Vue.options.components, builtInComponents); //合并本地的 KeepAlive 到 构造函数的options.components中
  1.  

  

  1. defineReactive$$1
  1. function defineReactive$$1 (obj, key, val, customSetter) {
  2. //创建一个观察队列 用来存储当该数据改变时候要触发的对象,或者数据
  3. var dep = new Dep();
  4. var property = Object.getOwnPropertyDescriptor(obj, key);
  5. if (property && property.configurable === false) {
  6. return
  7. }
  8.   //获取 js 中的访问器 get/set
  9. var getter = property && property.get;
  10. var setter = property && property.set;
  11.   
      //创建或返回一个 __ob__
  12. var childOb = observe(val);
  13. Object.defineProperty(obj, key, { //给当前对象重新定义 get/set 方法,当对象被重新设置set方法时候 触发 所有依赖该数据的 数据更新 __ob__
  14. enumerable: true,
  15. configurable: true,
  16. get: function reactiveGetter () {
  17. var value = getter ? getter.call(obj) : val;
  18. if (Dep.target) {
  19. dep.depend();
  20. if (childOb) {
  21. childOb.dep.depend();
  22. }
  23. if (Array.isArray(value)) {
  24. dependArray(value);
  25. }
  26. }
  27. return value
  28. },
  29. set: function reactiveSetter (newVal) {
  30. var value = getter ? getter.call(obj) : val;
  31. /* eslint-disable no-self-compare */
  32. if (newVal === value || (newVal !== newVal && value !== value)) {
  33. return
  34. }
  35. /* eslint-enable no-self-compare */
  36. if ("development" !== 'production' && customSetter) {
  37. customSetter();
  38. }
  39. if (setter) {
  40. setter.call(obj, newVal);
  41. } else {
  42. val = newVal;
  43. }
  44. childOb = observe(newVal); //给新的数据添加监听__ob__
  45. dep.notify(); // 更新所有依赖该数据的数据
  46. }
  47. });
  48. }

  

  1. initUse(Vue); //绑定 Vue.use(obj) 函数,安装插件 插件对象obj必须有 install 属性
  2.  
  3. initMixin$1(Vue);     //绑定 Vue.mixin(obj) 将绑定的 直接合并到 options 上面
  4.  
  5. initExtend(Vue);      //创建一个集成 Vue 的子类,用于创建公共的自定义 组件构造函数类
  6.  
  7. initAssetRegisters(Vue); } //绑定Vue.component , Vue,dereactor , Vue.filter 方法,用于注册 组件,指令,过滤器 并添加到 构造函数的options中

  

  1. 大部分是绑定到 Vue 的构造函数上面,为全局方法和属性。

http://www.cnblogs.com/jiebba/p/6544084.html

个人博客 :很多好用的 npm 包 , 可以看看 https://gilea.cn/ 

http://www.cnblogs.com/jiebba    我的博客,来看吧!

如果有错误,请留言修改下 哦!

  1.  

vue2源码浏览分析01的更多相关文章

  1. vue2源码浏览分析02

    1.组件初始化方法 init Vue.prototype._init = function (options) { /* istanbul ignore if */ if ("develop ...

  2. Spring IOC 源码简单分析 01 - BeanFactory

    ### 准备 ## 目标 了解 Spring IOC 的基础流程 ## 相关资源 Offical Doc:http://docs.spring.io/spring/docs/4.3.9.RELEASE ...

  3. Vue2源码分析-逻辑梳理

    很久之前就看完vue1,但是太懒就一直没写博客,这次打算抽下懒筋先把自己看过了记录下来,否则等全部看完,估计又没下文了 看源码总需要抱着一个目的,否则就很难坚持下去,我并没做过vue的项目,我几乎很少 ...

  4. JUC同步器框架AbstractQueuedSynchronizer源码图文分析

    JUC同步器框架AbstractQueuedSynchronizer源码图文分析 前提 Doug Lea大神在编写JUC(java.util.concurrent)包的时候引入了java.util.c ...

  5. 自定义View系列教程03--onLayout源码详尽分析

    深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...

  6. 自定义View系列教程02--onMeasure源码详尽分析

    深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...

  7. MapReduce的ReduceTask任务的运行源码级分析

    MapReduce的MapTask任务的运行源码级分析 这篇文章好不容易恢复了...谢天谢地...这篇文章讲了MapTask的执行流程.咱们这一节讲解ReduceTask的执行流程.ReduceTas ...

  8. Activity源码简要分析总结

    Activity源码简要分析总结 摘自参考书籍,只列一下结论: 1. Activity的顶层View是DecorView,而我们在onCreate()方法中通过setContentView()设置的V ...

  9. MapReduce的MapTask任务的运行源码级分析

    TaskTracker任务初始化及启动task源码级分析 这篇文章中分析了任务的启动,每个task都会使用一个进程占用一个JVM来执行,org.apache.hadoop.mapred.Child方法 ...

随机推荐

  1. ACM_求N^N的前5位数和后5位数(数论)

    NNNNN Time Limit: 2000/1000ms (Java/Others) Problem Description: 对于整数N,求N^N的前5位和后5位(1057题加强版) Input: ...

  2. Java对象简单实用(计算器案例)

    对 Java中的对象与属性,方法的使用,简单写了个案例 import java.util.Scanner; class Calculste { int a; //定义两个整数 int b; Strin ...

  3. C#与正则表达式的例子

    一个很好的文章,但是并没有测试 连接

  4. CF817B Makes And The Product

    思路: 模拟,数学. 实现: #include <iostream> #include <cstdio> #include <algorithm> using na ...

  5. offset家族基本简介

    Offset家族简介 offset这个单词本身是--偏移,补偿,位移的意思. js中有一套方便的获取元素尺寸的办法就是offset家族: offsetWidth和offsetHight 以及offse ...

  6. Android 五种方式实现Android底部导航栏

    https://segmentfault.com/a/1190000007697941

  7. 扩增子分析QIIME2-3数据导出Exporting data

    # 激活工作环境 source activate qiime2-2017.8 # 建立工作目录 mkdir -p qiime2-exporting-tutorial cd qiime2-exporti ...

  8. 类似倒圆角方法输入半径选择实体 kword

    ads_name ename; ads_point adspt; acedInitGet(NULL, TEXT("R")); while (1) { int rc = acedEn ...

  9. CAD从二进流加载数据(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::ReadBinStreamEx 从二进流加载数据,详细说明如下: 参数 说明 IMxDrawBinStream* pBinStream ...

  10. 数据导出为Excel(未完)

    更多详细内容 view页面: function Download() { //多个查询条件 dateStart = $("#j_dataTimeStart").datebox(&q ...