5

我正在研究 jQuery 源代码的工作原理,我了解 jQuery 对象只是将调用转发到jQuery.fn.initwherejQuery.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是否有原因(例如避免冲突或可读性或其他)?

4

1 回答 1

2

(此回复是假设您对原型继承有所了解。如果您不了解,则需要阅读有关它的文章以完全了解发生了什么。尝试在 Google 上搜索“原型继承 javascript”。)

当内部创建一个新的 jQuery 对象时,它是用new jQuery.fn.init(). init是一个构造函数,所以prototype在这个构造函数上设置属性可以让新创建的jQuery对象继承这个原型的所有属性(所有的方法jQuery.fn)。

如果只是new jQuery()使用,正如您似乎建议的那样,该对象将继承自,jQuery.prototype jQuery函数将被执行,正如您所知,这会做很多事情。而是使用init构造函数,因为它没有jQuery函数的包袱。设置jQuery.prototype为与jQuery.fn.init.prototypejust 相同允许您这样做jqueryobject instanceof jQuery,这很好,所以这就是jQuery对象具有原型的原因。

于 2012-11-18T14:20:21.953 回答