帮助理解jQuery的jQuery.fn.init为什么在fn中使用init

Mos*_* K. 44 javascript jquery prototype initialization

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

new jQuery.fn.init
Run Code Online (Sandbox Code Playgroud)

我想知道在jQuery的原型中使用init有什么意义?不定义init()作为jQuery对象本身的一部分服务于同一目的吗?


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

是否有人这样做:

jQuery('a').eq(0).hide().init('div').slideToggle(); //?
Run Code Online (Sandbox Code Playgroud)

mVC*_*Chr 56

编辑:重新阅读后我不认为这回答了你的问题,但是对于某人更好地理解jQuery如何工作可能是有用的,所以我要离开它.


正在进行的jQuery()是被定义为jQuery.fn.init()另一种说法jQuery.prototype.init(),即选择器功能!这意味着没有人会打电话jQuery.fn.init()jQuery.init()因为jQuery()IS .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 );
    },
Run Code Online (Sandbox Code Playgroud)

在评论中它说的只是我所说的,但更简单.但这只是jQuery的本地副本...但是,如果你在自执行函数结束时转到第908行(版本1.4.4),你会看到:

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

})();
Run Code Online (Sandbox Code Playgroud)

......这意味着这个地方jQuery成为全球性的jQuery.所以?所以......这个地方jQuery实际上是jQuery.fn.init()对的吗?那是什么init()?如果你从第100行到第208行看,你会发现它是选择器方法.什么是选择器方法?这是你用所有的时间来寻找标签,标识,类...这方法 $('#id'),jQuery('.class'),$('ul li a')...选择器功能!

因此,没有人会打电话,jQuery.init('div')因为它是jQuery('div')在该任务之后的冗长版本.并且记住它jQuery.fn与说完全相同,jQuery.prototype所以该部分正在做的是分配.init()作为jQuery对象原型的方法.IE是一个jQuery插件.

P,这是一口.我希望这是有道理的,如果有任何更正,以防我在这个冗长的解释的任何部分误导,请告诉我.

  • +1只是为了纯粹的努力.那么有没有什么特别的理由将原型用作**反对**只是在jQuery对象本身.它更快还是类似的东西(我无法想象它是) (5认同)
  • jQuery装载了大量的黑魔法,这是肯定的. (5认同)

orc*_*rca 8

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

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