美文网首页
对jq钩子机制的理解

对jq钩子机制的理解

作者: 李佳明先生 | 来源:发表于2017-09-28 18:27 被阅读0次

    先看看jq的hook表驱动的实现:

    (function(window, undefined) {
        var
            // 用于预存储一张类型表用于 hook
            class2type = {};
     
        // 原生的 typeof 方法并不能区分出一个变量它是 Array 、RegExp 等 object 类型,jQuery 为了扩展 typeof 的表达力,因此有了 $.type 方法
        // 针对一些特殊的对象(例如 null,Array,RegExp)也进行精准的类型判断
        // 运用了钩子机制,判断类型前,将常见类型打表,先存于一个 Hash 表 class2type 里边
        jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
            class2type["[object " + name + "]"] = name.toLowerCase();
        });
     
        jQuery.extend({
            // 确定JavaScript 对象的类型
            // 这个方法的关键之处在于 class2type[core_toString.call(obj)]
            // 可以使得 typeof obj 为 "object" 类型的得到更进一步的精确判断
            type: function(obj) {
     
                if (obj == null) {
                    return String(obj);
                }
                // 利用事先存好的 hash 表 class2type 作精准判断
                // 这里因为 hook 的存在,省去了大量的 else if 判断
                return typeof obj === "object" || typeof obj === "function" ?
                    class2type[core_toString.call(obj)] || "object" :
                    typeof obj;
            }
        })
    })(window);
    

    代码转载于ChokCoco
    某种程度上讲,钩子是一系列被设计为以你自己的代码来处理自定义值的回调函数。

    相关文章

      网友评论

          本文标题:对jq钩子机制的理解

          本文链接:https://www.haomeiwen.com/subject/mosvextx.html