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

回溯处理的设计

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

  • 内容
  • 内容

假如用$('ul').find('li')找到

    标签下所有的
  • 标签,对所有的
  • 标签绑定click事件之后又想返回到上一个查询给
      标签绑定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()等方法没了

      jQuery源码二周目#3 回溯处理的设计_第1张图片

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

      jQuery.prototype.constructor = jQuery;
      

你可能感兴趣的:(jQuery源码二周目#3 回溯处理的设计)