我正在研究jQuery源代码是如何工作的,我理解jQuery对象只是将调用转发到jQuery.fn.initwhere jQuery.fn只是一个引用jQuery.prototype.
然后在源代码中,有这一行:
// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
Run Code Online (Sandbox Code Playgroud)
有一个注释来解释代码的作用,但我仍然无法理解它.
有人可以解释一下这行代码意味着什么吗?它后面的实例化是在讨论什么,为什么我们需要将init的原型设置为jquery的prototpe?
jQuery源代码使用jQuery.fn而不是直接使用jQuery.prototype是有原因(比如避免冲突或可读性等)吗?
(此回复是在您对原型继承有一定了解的情况下编写的。如果您不了解,则需要阅读有关它的文章才能完全了解发生了什么。尝试在 Google 中搜索“原型继承 javascript”。)
当内部创建一个新的 jQuery 对象时,它是使用new jQuery.fn.init(). init是一个构造函数,因此prototype在这个构造函数上设置属性可以让新创建的 jQuery 对象继承这个原型的所有属性( 的所有方法jQuery.fn)。
如果只是new jQuery()使用,正如您似乎建议的那样,该对象将继承jQuery.prototype ,但该jQuery函数将被执行,正如您所知,这做了很多事情。而是使用构造init函数,因为它不带有函数的包袱jQuery。设置为与just 允许您执行的操作jQuery.prototype相同,这很好,这就是对象具有原型的原因。jQuery.fn.init.prototypejqueryobject instanceof jQueryjQuery