jQuery把$这个玩意应用的淋漓尽致。他的设计巧妙之处是在于把构造函数和函数充分利用。因此当你用$和$()时有很大差别。这个微妙之处很多程序员估计会没注意。
- 通过$调用的函数其实是jQuery的静态函数。
- 通过$()调用的函数其实是jQuery的成员函数。
$=jQuery;因此,$调用的函数其实是jQuery的静态函数。这个就很好理解了,那$()是如何实现呢?这个就比较麻烦了。
$=
jQuery;因此$() =
jQuery();
jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); }
从以上的代码可以看出 $() = jQuery.fn.init构造函数构造出来的对象。
jQuery.fn.init.prototype = jQuery.fn;
而jQuery.fn.init的原型链指向的是jQuery.fn,因此$() = 为
jQuery.fn的对象。
jQuery.fn = jQuery.prototype
此时jQuery.fn又= jQuery.prototype,因此$()就是
jQuery.prototype的对象。
所以$()调用的函数其实是jQuery的成员函数。
这个小技巧虽然很绕,但很实用,通过一个$,就可以返回jQuery的静态函数,还可以获取不同的jQuery对象。