当我们新建一个 jQuery 对象的时候,都会在其属性中发现一个 prevObject 的属性,如果单单从名字来看的,“前一个对象”,那么它到底是怎么用的呢。

在 jQuery 对象的内部,有着一个 jQuery 对象栈,用来维护所有已经操作过的 jQuery 对象。这样子的话可以写出很流畅的 jQuery 代码,比如操作父元素,操作子元素,再回到父元素的时候就很方便。

但实际上,这个栈是不存在的,我们知道数组可以当作栈或队列来使用,是不是说 jQuery 内部有这么个数组来存放这个对象栈呢。答案是 no,为什么,因为没必要这么麻烦。这样来想一想,如果每一个 jQuery 对象都有一个指针指向上一个对象的话,也就间接组成了一个 jQuery 对象栈。如果栈只有一个元素,prevObject 就默认指向 document。prevObject 是干什么用的,就是来实现对象栈的。比如:

<div id=“view”> <h1 class=“header”>标题</h1> <p>container</p> <strong class=“espe”>重点</strong> </div>

对于上面的 html:

var $view = $(“#view”); // $header 是由 $view 操作得到的 var $header = $view.find(‘.header’); $header.prevObject === $view; // true

不过在使用的时候,都是忽略对象栈而定义不同的 jQuery 对象来指向父元素和子元素,就像上面的例子那样,既然定义了 header,就不需要 prevObject 了。