最近在看jQuery源码,jQuery 1.3.0中core.js 524行中$.fn.init.prototype = $.fn,并且很多api(比如说css,index等)是定义在$.fn上,$()是一个工厂返回的是$.fn.init的实例,因为$.fn.init的原型指向$.fn,因此$.fn.init可以继承$.fn上的所有方法,可是不觉着这种对象本身的一个属性的原型指向本身很怪吗?为什么不把$.fn.init定义成另一个对象(比如说$.init),然后原型指向$.fn($.init.prototype = $.fn)?
Why jQuery do this: jQuery.fn.init.prototype = jQuery.fn?
试了一下,好像确实没什么区别。唯一的一点就是如果把
init
定义成jQuery.init
以后,生成的jQuery
对象少了一个init
方法,因为此时原型对象上不再有init
了。不过这个应该没有关系,会有需要直接调用init
方法的场合吗。这样生成jquery对象的时候不用new