| // 這個分號的作用是防止和其他jquery外掛程式合并時,別人不規範的jquery外掛程式忘記使用分號結束 //影響到我們當前的外掛程式,導致無法啟動並執行問題。 ;(function ( $, window, document, undefined ) { // undefined作為形參的目的是因為在es3中undefined是可以被修改的 //比如我們可以聲明var undefined = 123,這樣就影響到了undefined值的判斷,幸運的是在es5中,undefined不能被修改了。 // window和document本身是全域變數,在這個地方作為形參的目的是因為js執行是從裡到外尋找變數的(範圍),把它們作為局部變數傳進來,就避免了去外層尋找,提高了效率。 // 聲明預設屬性對象 var pluginName = "defaultPluginName", defaults = { propertyName: "value" }; // 建構函式 function Plugin ( element, options ) { this.element = element; // 將預設屬性對象和傳遞的參數對象合并到第一個Null 物件中 this.settings = $.extend( {}, defaults, options ); this._defaults = defaults; this._name = pluginName; this.init(); } // 為了避免和原型對象Plugin.prototype的衝突,這地方採用繼承原型對象的方法 $.extend(Plugin.prototype, { init: function () { // 初始化,由於繼承自Plugin原型, // 你可以在這裡直接使用this.element或者this.settings console.log("xD"); }, yourOtherFunction: function () { // some logic } }); // 對建構函式的一個輕量級封裝, // 防止產生多個執行個體 $.fn[ pluginName ] = function ( options ) { this.each(function() { if ( !$.data( this, "plugin_" + pluginName ) ) { $.data( this, "plugin_" + pluginName, new Plugin( this, options ) ); } }); // 方便鏈式調用 return this; }; })( jQuery, window, document ); |