您的位置:首页 > Web前端 > JQuery

jQuery-源码阅读,pushStack()入栈方法

2016-02-27 20:41 721 查看
首先了解下栈:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。栈的规则是先进后出。下面看下jQuery中链式方法的使用:

$('ul').children('li').css("backgroundColor","#CCC");


首先选择页面中ul元素,再寻找其子元素中li,为其设置背景颜色为灰色。这里,ul首先入栈,子元素li后入栈,则css()最后操作的是li元素不是ul,这里是因为jQuery里所有链式操作都调用了jQuery中的工具方法——pushStack()。下面看下这个神奇函数的源码:

pushStack: function( elems ) {

// Build a new jQuery matched element set
var ret = jQuery.merge( this.constructor(), elems );

// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;

// Return the newly-formed element set
return ret;
}


可以看到,首先新建一个ret对象,其中连接(merge)了jQuery和传入新对象(集合),然后设置ret对象的上级元素为this,返回ret。然后再看下返回上级的end()在源码中的实现:

end: function() {
return this.prevObject || this.constructor(null);
}


end()利用了pushStack中的prevObject,返回该对象,若该对象为空,返回构造函数。

在源码中多次使用这个入栈函数,如map()、slice()、eq()等常用方法中都调用了这个入栈方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息