详解Vue源码学习之callHook钩子函数


Posted in Javascript onJuly 25, 2018

Vue实例在不同的生命周期阶段,都调用了callHook方法。比如在实例初始化(_init)的时候调用callHook(vm, 'beforeCreate')和callHook(vm, 'created')。

详解Vue源码学习之callHook钩子函数

这里的"beforeCreate","created"状态并非随意定义,而是来自于Vue内部的定义的生命周期钩子。

var LIFECYCLE_HOOKS = [
 'beforeCreate',
 'created',
 'beforeMount',
 'mounted',
 'beforeUpdate',
 'updated',
 'beforeDestroy',
 'destroyed',
 'activated',
 'deactivated',
 'errorCaptured'
];

再研究Vue官网的生命周期图示,是不是更容易理解了。

详解Vue源码学习之callHook钩子函数

接下来我们来看一下Vue中实现钩子函数的源码:

function callHook (vm, hook) {
 // #7573 disable dep collection when invoking lifecycle hooks
 pushTarget();
 var handlers = vm.$options[hook];
 if (handlers) {
  for (var i = 0, j = handlers.length; i < j; i++) {
   try {
    handlers[i].call(vm);
   } catch (e) {
    handleError(e, vm, (hook + " hook"));
   }
  }
 }
 if (vm._hasHookEvent) {
  vm.$emit('hook:' + hook);
 }
 popTarget();
}

举个例子说明:

let test = new Vue({
           data: {
              a: 1
           },
           created: function () {
            console.log("这里是Created");
           }
        });

实例化一个Vue组件test,给test定义了数据data,以及created方法。而在实例化组件的时候,Vue内部调用了callHook(vm,'created')(上文已说明)。执行callHook函数的时候,Vue在test组件的$options中查找created是否存在,如果存在的话就执行created相对应的方法。这里就会执行console.log("这里是Created")。

callHook的作用就是执行用户自定义的钩子函数,并将钩子中this指向指为当前组件实例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype Function对象 学习
Jul 12 Javascript
JavaScript禁止页面操作的示例代码
Dec 17 Javascript
初步认识JavaScript函数库jQuery
Jun 18 Javascript
Backbone.js的Hello World程序实例
Jun 19 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
Aug 02 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
详解Require.js与Sea.js的区别
Aug 05 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 Javascript
详解vuex的简单todolist例子
Jul 14 Javascript
JS如何定义用字符串拼接的变量
Jul 11 Javascript
通过实例解析js可枚举属性与不可枚举属性
Dec 02 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 #Javascript
浅析JS中回调函数及用法
Jul 25 #Javascript
详解使用mpvue开发github小程序总结
Jul 25 #Javascript
详解mpvue开发小程序小总结
Jul 25 #Javascript
Bootstrap table表格初始化表格数据的方法
Jul 25 #Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 #Javascript
微信小程序实现图片上传放大预览删除代码
Jun 28 #Javascript
You might like
E路文章系统PHP
2006/12/11 PHP
php addslashes和mysql_real_escape_string
2010/01/24 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
php 的反射详解及示例代码
2016/08/25 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
2018/05/24 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
jQuery获得内容和属性示例代码
2014/01/16 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
Python中函数参数调用方式分析
2018/08/09 Python
对python 命令的-u参数详解
2018/12/03 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
时尚、社区、科技:SEVENSTORE
2019/04/26 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
创建学习型党组织实施方案
2014/03/29 职场文书
高中生操行评语
2014/04/25 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
法制教育讲座心得体会
2016/01/14 职场文书