什么是钩子机制?使用钩子机制有什么好处? 
钩子机制也叫hook机制,或者你可以把它理解成一种匹配机制,就是我们在代码中设置一些钩子,然后程序执行时自动去匹配这些钩子;这样做的好处就是提高了程序的执行效率,减少了if else 的使用同事优化代码结构。由于js是单线程的编程语言,所以程序的运行效率在前端开发是比较重要的,在开发中我们秉承如果能用switch case 的地方就不要用if else 可以用hook实现的尽量使用hook机制去实现。 
这里我们举一个例子看一下: 
例如我们在向后台进行ajax请求的时候,后台经常会返回我们一些常见的错误码,如:001代表用户不存在,002代表用户密码输入错误。003代表用户被锁定。这个时候我们要将错误友好的提示给用户。这个时候我们该怎样实现呢? 
一般的写法可能是:

$.ajax(option,function(result){var errCode = result.errCode ;//错误码 if(errCode){ if(errCode =='001'){ alert("用户不存在") }else if(errCode =='002'){ alert("密码输入错误") }else if(errCode =='003'){ alert("用户被锁定") } }else{ //登录成功 } },function(err){ })

这样写其实是比较low低,稍微有点经验的可能会使用switch case来实现,但是这个两种写法都无法避免一个问题就是如果我的错误码特别多,那得写多少个if else和case 啊?但是如果使用hook写法的话就会简单好多, 
首先我们先声明一个错误码钩子列表

var codeList  = {"001":"用户不存在","002":"密码输入错误", "003":"用户被锁定" } $.ajax(option,function(result){ var errCode = result.errCode ;//错误码 if(!errCode){ alert(codeList[errCode]); }else{ //登录成功 } },function(err){ })

这样写的话代码结构更加清楚明了。这个例子是最简单的应用了的了。在Jquery 中hook机制被大量的使用,这里我们就Jquery中判断变量类型的type方法来具体看一下 
通常我们在js中判断一个变量的数据类型?首先会想到type of 和 instanceof 
如果是基本类型我们可以直接使用typeof,但是这种方式只能判断基本数据类型,如果是对象,它返回结果都市Object,如果变量是null它返回的也是Object。这个时候我们要准确的判断一般的写法可能会是:

  function type(obj){var type = ""; if(obj==null){ type = null; }else{ type = obj.a.constructor.toString().split("(")[0].split(" ")[1] } return type; }

在jquery中的实现是:

var class2type={};
var toString = Object.prototype.toString;
jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol",function(index,name){ class2type["Object"+" name"]==name.toLowerCase(); }) type:function(obj){ if(obj==null){ return obj+""; } return typeof obj =="Object"||typeof obj ==="function"?class2type[toString.call(obj)]|||"object":typeof obj }

上面代码中 
class2type = { ‘[object Boolean]’: ‘boolean’, ‘[object Number]’: ‘number’, ‘[object String]’: ‘string’, ‘[object Function]’: ‘function’, ‘[object Undefined]’: ‘undefined’, ‘[object Null]’: ‘null’, ‘[object Array]’: ‘array’, ‘[object Date]’: ‘date’, ‘[object RegExp]’: ‘regexp’, ‘[object Object]’: ‘object’, ‘[object Error]’: ‘error’}; 
设置一个类型钩子对象 
toString.call(obj)就是Object.prototype.toString.call(arg)来细致判断obj的类型。在这里则转换成对象对应索引是否在class2type 中存在相应value,若存在则返回value判断,若不存在则返回object类型。 
这样就实现了类型的判断。

转载于:https://www.cnblogs.com/chris-oil/p/8577337.html

[转] js中的钩子机制(hook)相关推荐

  1. Js中的callback机制

    http://www.awflasher.com/blog/archives/906 Js中的callback机制,即回调,可以这么形象的来理解,一个button存在这里,我们可以add一个actio ...

  2. 柯里化思想--JS中的预处理机制

    2019独角兽企业重金招聘Python工程师标准>>> 柯里化思想:就是预处理机制 利用函数执行,可以形成一个"不销毁的私有作用域的原理", 把需要预先处理的内容 ...

  3. 详解JS中的事件机制(带实例)

    2019独角兽企业重金招聘Python工程师标准>>> 1. 事件冒泡与事件捕获 事件冒泡和事件捕获分别由微软和网景公司提出,这两个概念都是为了解决页面中事件流(事件发生顺序)的问题 ...

  4. js中if到底该如何判断变量为空?

    我们项目中常常需要判断一些变量是否为空,但是由于js的机制找不到很好的方法去统一判断方式,我们不妨先了解一下js中if判断机制 if判断机制 js中if会把非 Boolean 表达式转换为 Boole ...

  5. JS中常见的内存泄漏及识别方式

    JavaScript常见的内存泄漏及识别方式 1.什么是内存 2.什么是内存泄漏 3.内存泄漏导致的后果 4.常见的内存泄漏 (1)全局变量引起的内存泄漏 (2)闭包引起的内存泄漏 (3)被遗忘的定时 ...

  6. JavaScript中的钩子(钩子机制\钩子函数\hook)是什么?

    我的博客https://www.ideaopen.cn/ 首先,看到我们的标题: JavaScript中的钩子(钩子机制\钩子函数\hook) 是什么? 我们前端的JavaScript中,经常提到钩子 ...

  7. Apache Hook机制解析(上)——钩子机制的实现

    Apache中大量使用了Hook机制,使得第三方开发Module可以扩展Apache服务器的默认处理. Apache Hook功能可以简述如下: 1.    程序主框架根据名称声明和定义Hook 2. ...

  8. 钩子运行机制HOOK

    转载 javanetc 代码频道 :http://www.javanetc.com/vc/vc_1749.html 基本概念 钩子(Hook)是Windows消息处理机制的一个平台,应用程序可以在上面 ...

  9. php ci框架 hook,CodeIgniter框架钩子机制实现方法【hooks类】

    本文实例讲述了CodeIgniter框架钩子机制实现方法.分享给大家供大家参考,具体如下: 记得上一次去到喜啦面试,面试官问我一个问题:codeigniter是如何实现钩子机制的? 当时答不上来,后来 ...

最新文章

  1. 【转】微信公共号开发,提示“该公众号暂时无法提供服务,请稍后再试”,如何解决?...
  2. 在 MySQL 中查找含有目标字段的表
  3. 面试|图解kafka的高可用机制
  4. 3、Python 基础类型 -- List 列表类型
  5. 【Vue】Vue入门 -(本地篇+网络篇)代码示例及运行效果
  6. Eclipse使用总结【更新中】
  7. ajax中html的属性,jQuery Ajax加载html数据正常,但属性似乎'不可读'
  8. 东软是如何看待“人与资产”管理的转型
  9. 如何更好利用大数据的优势
  10. 百度网盘有linux客户端吗,bcloud-百度网盘Linux客户端
  11. 解决raise ValueError(Sample larger than population)问题
  12. Mysql 最全教程
  13. 伽卡他卡使用教程_伽卡他卡电子教室安装使用和常见问题
  14. linux 查看emmc分区表_Linux和Uboot下eMMC boot分区读写
  15. 区块链软件开发公司 区块链的基本原理
  16. virtio网络Data Plane卸载原理——vhost protocol
  17. MATLAB(一)Matlab“帮助”的使用
  18. 一文看懂用word制作电子公章,2分钟就能搞定!
  19. 六度分离 (folyd算法)
  20. ESP8266 板子引脚与GPIO引脚对应关系-管脚定义

热门文章

  1. Linux常用到的指令汇总
  2. 关于加载离线SHP文件、geodatabase文件所遇到的路径问题
  3. ASP.NET中自动生成XML文件并通过XSLT显示在网页中的方法
  4. 加深认识与理解ADO.NET
  5. VMware vsphere 中创建虚拟机的方法
  6. shell脚本eval
  7. 材料科学与工程考计算机,计算机在材料科学与工程中应用作业.pdf
  8. 注册表和计算机用户名关系,IUSR_计算机名和IWAM_计算机名帐户的用户名和密码...
  9. 软件测试技巧|软测经典面试题(二)
  10. Intellij Idea 下包建包,无论怎么建都在同一级,已解决(附图)