帮助理解jQuery的jQuery.fn.init为什么是fn中的init

我正在查看jQuery,以更好地了解它是如何工作的。 构造函数基本上只是调用

new jQuery.fn.init 

我想知道在jQuery的原型中使用init有什么意义? 不会将init()作为jQuery对象本身的一部分来实现同样的目的?


基本上我想知道为什么jQuery的init函数位于jQuery.fn.init()而不是jQuery.init()

有没有人这样做:

 jQuery('a').eq(0).hide().init('div').slideToggle(); //? 

编辑:在重新阅读我不认为这回答你的问题,但它可能是有用的更好的理解如何jQuery的作品,所以我离开它。


发生了什么是jQuery()被定义为jQuery.fn.init()这是另一种说jQuery.prototype.init()这是select器function! 这意味着没有人会调用jQuery.fn.init()jQuery.init()因为jQuery().init()

什么?

让我们看看你正在谈论的代码片段:

 // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context ); }, 

在评论中,只是说了我所说的,但更简单一些。 但是,这只是jQuery的本地副本…但是,如果您在自执行function结束时转到908行(版本1.4.4),则会看到:

 // Expose jQuery to the global object return (window.jQuery = window.$ = jQuery); })(); 

…这意味着这个本地jQuery成为全球jQuery 。 所以? 所以…这个本地jQuery实际上是jQuery.fn.init()对不对? 那么init()什么? 如果你从第100到第208行看,你会发现它是select器方法。 什么是select器的方法? 这就是你一直使用的方法来查找标签,id,类… $('#id')jQuery('.class')$('ul li a') …select器函数!

所以没有人会调用jQuery.init('div')因为它是在这个赋值之后的jQuery('div')的一个详细版本。 请记住, jQuery.fnjQuery.prototype完全一样,所以这个部分所做的就是将.init()作为jQuery对象原型的一个方法。 IE一个jQuery插件。

唷,那是一口。 我希望这是有道理的,如果任何人有任何更正,如果我误解了这个冗长的解释的任何部分,请让我知道。

$()是一个instanceof (new $())是一个instanceof (new $.fn.init())

jQuery使用的技术是如何实现这一点。 $()总是返回,就像用new关键字调用一样。 然而,而不是在this引用内部function jQuery() {...}上使用条件开关,它在所有情况下使用外部委托对象。 这个外部委托对象jQuery.fn.init() {...}被赋予了jQuery原型,所以它的对象'type'是jQuery ,并且它的所有实例实际上都是jQuery实例。