帮助理解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实例。