帮助理解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.fn
和jQuery.prototype
完全一样,所以这个部分所做的就是将.init()
作为jQuery
对象原型的一个方法。 IE一个jQuery插件。
唷,那是一口。 我希望这是有道理的,如果任何人有任何更正,如果我误解了这个冗长的解释的任何部分,请让我知道。
$()
是一个instanceof (new $())
是一个instanceof (new $.fn.init())
jQuery使用的技术是如何实现这一点。 $()
总是返回,就像用new
关键字调用一样。 然而,而不是在this
引用内部function jQuery() {...}
上使用条件开关,它在所有情况下使用外部委托对象。 这个外部委托对象jQuery.fn.init() {...}
被赋予了jQuery原型,所以它的对象'type'是jQuery
,并且它的所有实例实际上都是jQuery
实例。