理解jquery源代码 - jquery.fn.init

时间:2012-11-18 14:08:10

标签: javascript jquery

我正在研究jQuery源代码是如何工作的,我理解jQuery对象只是将调用转发给jQuery.fn.init,其中jQuery.fn只是对jQuery.prototype的引用。

然后在源代码中,有这一行:

// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;

有一条评论可以解释代码的作用,但我仍然无法理解。

  1. 有人可以解释这行代码的含义吗?它后面的实例化是在讨论什么,为什么我们需要将init的原型设置为jquery的prototpe?

  2. 是否有一个原因(如避免冲突或可读性等)jQuery源代码使用jQuery.fn而不是直接使用jQuery.prototype?

1 个答案:

答案 0 :(得分:2)

(假设您对原型继承有一定的了解,可以写这个回答。如果不这样做,您需要阅读一篇关于它的文章,以便完全了解正在发生的事情。尝试在谷歌搜索“原型继承javascript”。 )

在内部创建新的jQuery对象时,会使用new jQuery.fn.init()创建它。 init是一个构造函数,因此在此构造函数上设置prototype属性允许新创建的jQuery对象继承此原型的所有属性(jQuery.fn的所有方法)。

如果仅使用了new jQuery(),正如您似乎建议的那样,该对象将继承自jQuery.prototype ,但将执行jQuery函数,你知道吗很多。使用init构造函数是因为它没有jQuery函数的包袱。将jQuery.prototype设置为与jQuery.fn.init.prototype相同只是允许您执行jqueryobject instanceof jQuery,这很好,这就是jQuery对象拥有原型的原因。