end方法

每个jQuery对象都有三个属性,contextselectorprevObject

end方法

return this.prevObject || this.constructor();

pushStack 方法

pushStack = function( elems ) {
  var ret = jQuery.merge( this.constructor(), elems );
  ret.prevObject = this;
  return ret;
}
  1. this.constructor方法指向jQuery,因此会创建一个新的对象
  2. 将元素合并到新的jQuery对象上,然后将之前的this绑定到prevObject

内部使用 pushStack 的方法

find 为例,还有notfilter

find = function( selector ) {
    var i, ret,
        len = this.length,
        self = this;
    // 即使是 元素,检查是不是属于自己的
        // 将属于自己的元素再 使用 pushStack,这样可以创建新的jQuery对象
    if ( typeof selector !== "string" ) {
        return this.pushStack( jQuery( selector ).filter( function() {
            // this 是当前的的 DOM 元素
            for ( i = 0; i < len; i++ ) {
                // 检查一个元素是另一个元素的后代,container , contained
                if ( jQuery.contains( self[ i ], this ) ) {
                    return true;
                }
            }
        } ) );
    }

    ret = this.pushStack( [] );
        for ( i = 0; i < len; i++ ) {
        //  jQuery.find = Sizzle
        // 参数,selector, context, results, seed
        // 内部操作 results 也就是 ret,将符合要求的元素添加到ret上
        // 传址
        jQuery.find( selector, self[ i ], ret );
    }
    // 看一下,是集合还是单个元素
    return len > 1 ? jQuery.uniqueSort( ret ) : ret;
} 

你可能感兴趣的:(end方法)