jQuery是一個非常好的庫,學習它的實現原理是一個很好的提高代碼編寫能力的途徑,這里來簡單解析下jQuery的基本架構,主要來說下$符號的實現原理。直接看代碼吧。
<script> (function(w){ //工廠 function jQuery(selector, context){ return new jQuery.fn.init(selector, context); } //給原型提供一個簡寫方式 jQuery.fn = jQuery.prototype = { }; //init才是jQuery中真正的構造函數 var init = jQuery.fn.init = function(selector, context){ }; //把構造函數的原型,替換為jQuery工廠的原型 //這么做的目的是為了實現jQuery的插件機制,讓外界可以通過jQuery方便的進行擴展 init.prototype = jQuery.fn; w.jQuery = w.$ = jQuery; }(window)); </script>
1.jQuery借助了沙箱模式,其實整個jQuery包中的代碼就是一個自執行函數,並且把window對象作為參數傳遞了過去。
2.jQuery函數只是一個工廠,真正的構造函數時jQuery.fn.init( )
3.把init的原型對象替換為jQuery.fn,其實也就是替換為了jQuery這個函數自己的原型對象,也就是jQuery.prototype,這么做的目的是為了實現插件機制,讓外界可以通過jQuery方便的進行擴展。
比如,我們要做一個對話框插件,就可以這么做:
jQuery.fn.jqAlert = function(msg){ alert(msg); }
這樣一個簡單的jq插件就做好了,用的時候只需要調用:
$().jqAlert('aaa');