jQuery().end()的内部实现及源码分析
jQuery().end()的作用是返回当前jQuery对象的上一个状态。
1、end()源码:
// 所有通过pushStack方法获得的jQuery对象都可以通过end方法返回之前的状态
// 如果有preObject对象这返回该对象,否则调用构造函数返回jQuery的空对象
end: function() {
return this.prevObject || this.constructor(null);
},
end()的源码很简单,但是需要了解prevObject是如何形成的,所以需要了解pushStack方法都做了什么。
2、pushStack()源码:
pushStack: function( elems ) {
// 生成一个jQuery对象
// merge()是绑定在jQuery构造函数上的一个方法,外部无法调用。其作用是将第二个参数合并到第一个参数中。
// 该句讲elems合并到一个空的jQuery对象中,形成一个有内容的jQuery对象。
var ret = jQuery.merge( this.constructor(), elems );
// merge产生的jQuery对象设置一个prevObject属性,并将当前(merge之前的)的对象赋值给prevObject
ret.prevObject = this;
ret.context = this.context;
return ret;
},