我正在研究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;
有一条评论可以解释代码的作用,但我仍然无法理解。
有人可以解释这行代码的含义吗?它后面的实例化是在讨论什么,为什么我们需要将init的原型设置为jquery的prototpe?
是否有一个原因(如避免冲突或可读性等)jQuery源代码使用jQuery.fn而不是直接使用jQuery.prototype?
答案 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
对象拥有原型的原因。