美文网首页程序员jQuery源码笔记.jpg
jQuery源码二周目#3 回溯处理的设计

jQuery源码二周目#3 回溯处理的设计

作者: 柠檬果然酸 | 来源:发表于2020-08-20 15:49 被阅读0次

回溯处理的设计

jQuery内部维护着一个jQuery对象栈,通过prevObject属性能找到前一个对象。这个对象栈有什么用?

<ul>
    <li>内容</li>
    <li>内容</li>
</ul>

假如用$('ul').find('li')找到<ul>标签下所有的<li>标签,对所有的<li>标签绑定click事件之后又想返回到上一个查询给<ul>标签绑定click事件,这时候对象栈就派上用场。

    jQuery.fn = jQuery.prototype = {
        init: function(selector, context) {

        },

        // ...

        find: function() {
            return this.pushStack();
        },

        pushStack: function () {
            // 创建一个新的jQuery对象
            var ret = this.constructor();
            ret.prevObject = this;
            return ret;
        }
    }

每次调用find方法的时候会创建一个新的jQuery对象,新的jQuery对象的prevObject属性指向旧的jQuery对象,然后再将新的对象返回。核心方法是pushStack,只有简短的3行代码。

然后调用var jq = $().find()测试一下似乎没问题,prevObject属性也指向上一个对象

但是继续展开发现原型中的init() find() pushStack()等方法没了

这就是覆盖原型的一个坑,覆盖原型的同时一定要记得重写构造器constructor

jQuery.prototype.constructor = jQuery;

相关文章

网友评论

    本文标题:jQuery源码二周目#3 回溯处理的设计

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