成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JQuery插件之$.fn

muzhuyu / 2024人閱讀

摘要:既然是插件就要考慮兼容性,所以通過在匿名函數(shù)中多定義一個的形參,由于只傳入了一個實參,從而可以保證形參未被賦值,從而最終是我們想要的的值,什么是我們想要的即,沒有被賦值,就是。表示一個匿名函數(shù),后面緊跟一個,表示立即執(zhí)行函數(shù)。

jQuery對象方法
$("a").css("color", "red");

當使用$選擇元素的時候,它會返回一個jQuery對象,這個對象中包含了你一直使用的方法(比如:.css(),.click()等)。這個jQuery對象是從$.fn對象中得到的這些方法。$.fn對象包含了jQuery對象的所有方法,如果想編寫我們自己的方法,也要將方法定義在$.fn對象里面。使用這種方式編寫插件,即jQuery類的實例將會擁有此功能。為什么會有這種效果?簡單看下源碼

jQuery.fn = jQuery.prototype ={ 
   init: function( selector, context ){
      //do something...
};

從源碼可知,當使用$.fn的方式編寫插件時,就是在jQuery的原型中綁定新的方法,所以根據(jù)原型的特性,新創(chuàng)建的jQuery對象自然會擁有新綁定的方法。

初識插件

目的:改變a標簽的字體顏色
做法:創(chuàng)建名為greenify的方法,將其加在$.fn里面。
如此一來,greenify方法適用于所有的jQuery對象了



    Title
    
    


    Click Me!!!
    Cover Me!!!

$.fn還有另外一種寫法$.fn.extend({})

jQuery.fn.extend({
    greenify: function () {
        $(this).css("color", "red");
    }
});
$(function () {
    $("a").greenify();
});
鏈式寫法
jQuery.fn.extend({
    greenify: function () {
        $(this).css("color", "red");
        //在結(jié)尾處返回this
        return this;
    }
});
$(function () {
    $("a").greenify().addClass("greenified");
});

鏈式編程的好處就是當調(diào)用完一個方法后,可以在后面繼續(xù)調(diào)用該對象的其他方法。

$的別名保護

$在JavaScript庫中使用是非常廣泛的,如果你正在使用的其他JavaScript類庫中也使用到了$,并且你也使用了jQuery,那么你不得不使用jQuery.noConflict()來解除沖突。顯然這會破壞我們的插件,因為它是在假設(shè)$是jQuery函數(shù)的別名(實際上$本來就是jQuery的別名)如果既想使用其他插件,也要使用jQuery的$別名,我們需要將代碼放進立即執(zhí)行函數(shù)(文章結(jié)尾會對其簡單解釋)中,然后將jQuery作為實參傳遞進去,$作為形參接收。

(function ( $ ) {
 
    $.fn.greenify = function() {
        this.css( "color", "green" );
        return this;
    };

}( jQuery ));

由于window,document都是全局作用域的,而將其傳入函數(shù)內(nèi)部后,其在內(nèi)部是作為局部變量存在的,這樣做可以提高性能,減少作用域的查找時間,如果在函數(shù)內(nèi)部多次調(diào)用windowdocument,這是很高效的做法。

(function ( _window, _document ) {
 
    $.fn.greenify = function() {
        this.css( "color", "green" );
        return this;
    };
 
}( window, document));

另外,存儲私有變量也是使用立即執(zhí)行函數(shù)的主要目的,假如想要存儲一個默認的顏色,就可以使用一個私有變量進行存儲。

 (function ($) {
     var defaultColor = "pink";
     $.fn.extend({
         setColor:function () {
            $(this).css("color", defaultColor);
            return $(this);
         }
     })
 })(jQuery);
 $(function () {
     //所有div的text都會變成粉色
     $("div").setColor();
 });
;分號的使用

通常在編寫插件時,會在在立即執(zhí)行函數(shù)前加入一個分號

;(function($){
   //do something...
})(jQuery);

作用:防止多個文件壓縮合并后,前一個文件最后一行語句沒加分號,而引起合并后的語法錯誤。
如果前面已經(jīng)加了分號,此時就會多出來一個分號,但這樣是不會報錯的。即不怕多,就怕少。

undefined解決兼容性問題
;(function($, undefined){
  //do something...
})(jQuery)

上面代碼的undefined參數(shù)略顯多余,此參數(shù)是為了解決undefined在老一輩的瀏覽器(IE5)可以被賦值的問題,全局的undefined有可能會被其他函數(shù)覆蓋。

 var undefined = 99;
 alert(undefined);

以上代碼如果在IE5運行,可以彈出99, 而不是undefined,如果是這樣的話,全局的undefined就有被其他函數(shù)覆蓋的危險;但以上代碼在chrome運行,會彈出undefined。
既然是插件就要考慮兼容性,所以通過在匿名函數(shù)中多定義一個undefined的形參,由于只傳入了一個實參jQuery,從而可以保證undefined形參未被賦值,從而最終是我們想要的undefined的值,什么是我們想要的undefined?即,undefined沒有被賦值,undefined就是undefined。

最大限度的減少插件的空間

當使用$.fn創(chuàng)建插件時,盡量減少空間的占用,能使用參數(shù)進行區(qū)分的,就不要多定義一個方法,這樣可以降低插件被覆蓋的可能性。

反例

(function( $ ) {
    $.fn.TurnOnLight= function() {
        // Turn on
    };
    $.fn.TurnOffLight = function() {
        // Turn off
    };
}( jQuery ));

正例

(function( $ ) {
    $.fn.light = function( action ) {
        if ( action === "turnOn") {
            // Turn on light code.
        }
        if ( action === "turnOff" ) {
            // Turn off light code.
        }
    };
}( jQuery ));
使用參數(shù)選項

當插件越來越復(fù)雜時,通過接收參數(shù)選項的方式來自定義插件是一種很好的做法。



    Title
    



JavaScript
Jquery

調(diào)用changeColor不傳遞任何參數(shù),文本顏色默認紅色,背景默認天藍色;反之按照傳入?yún)?shù)渲染顏色。默認的顏色被$.extned()覆蓋為其他顏色。

$.extend({
    color: "red",
    backgroundColor:"skyblue"
}, options)

以上代碼執(zhí)行結(jié)果:options如果有值,那么它將覆蓋第一個參數(shù)并返回options;如果為undefined則直接返回第一個參數(shù)。

簡單解釋立即執(zhí)行函數(shù)(IIFE)

立即執(zhí)行函數(shù)((Immediately-Invoked Function Expression)也稱為自調(diào)用函數(shù),函數(shù)定義好后會自動執(zhí)行。(function(){})表示一個匿名函數(shù),后面緊跟一個(),表示立即執(zhí)行函數(shù)。

(function(){
   console.log("我會立即執(zhí)行");
})()
(function(param){
    console.log(param); //我會立刻執(zhí)行
})("我會立刻執(zhí)行");

優(yōu)點:不會產(chǎn)生產(chǎn)生全局變量,不會造成變量污染。
缺點:只能執(zhí)行一次,沒法重復(fù)執(zhí)行。
在編寫插件時,使用IIFE是最合適不過的了,插件只需要引用一次,即執(zhí)行一次。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/109073.html

相關(guān)文章

  • 前端基礎(chǔ)進階(十一):詳細圖解jQuery對象,以及如何擴展jQuery插件

    摘要:而在構(gòu)造函數(shù)中,返回了的實例對象。在中直接返回過的實例,這里的是的真正構(gòu)造函數(shù)最后對外暴露入口時,將字符與對等起來。因此當我們直接使用創(chuàng)建一個對象時,實際上是創(chuàng)建了一個的實例,這里的正真構(gòu)造函數(shù)是原型中的方法。 showImg(https://segmentfault.com/img/remote/1460000008749398); 早幾年學習前端,大家都非常熱衷于研究jQuery源...

    RebeccaZhong 評論0 收藏0
  • jQuery入門筆記(七)插件

    摘要:目前插件已超過幾千種,由來自世界各地的開發(fā)者共同編寫驗證和完善。而對于開發(fā)者而言,直接使用這些插件將快速穩(wěn)定架構(gòu)系統(tǒng),節(jié)約項目成本。也就是說,插件也是代碼,通過文件引入的方式植入即可。現(xiàn)在我們就完成了一個下拉菜單的插件。 插件(Plugin)也成為 jQuery 擴展(Extension),是一種遵循一定規(guī)范的應(yīng)用程序接口編寫出來的程序。目前 jQuery 插件已超過幾千種,由來自世界...

    defcon 評論0 收藏0
  • 理解jquery的$.extend

    摘要:當目標對象為空時,對象將會被默認為目標對象,這時相當于我們在的命名空間下添加新的功能,這是常見的插件開發(fā)模式。以上皆個人愚見,請笑納 理解jquery的$.extend 今日在寫js插件過程中需要使用擴展對象的方法,便想到了jQuery.extend這個方法,但又不甚了解,故去查了下官方API文檔,自己也進行了相應(yīng)嘗試,現(xiàn)將所得總結(jié)如下: $.extend和$.fn.extend的相關(guān)...

    CarterLi 評論0 收藏0
  • jQuery擴展

    摘要:傳遞一個可拓展的默認對象參數(shù)而不是大量的參數(shù)給插件。始終命名空間的方法,事件和數(shù)據(jù)。 jq--CDN jQ -- jQuery源碼解析 1、jQuery.extend() 與 jQuery.fn.extend()把jQuery看成一個封裝js類 這樣好理解$.extend是擴展的jQuery這個類 為jQuery類添加類方法 可以理解為靜態(tài)方法 只跟這個類本身有關(guān) 跟具體的實例化對象是...

    hss01248 評論0 收藏0
  • 手把手教你JQuery插件的寫法和規(guī)范

    摘要:示例合并和,修改并返回。例如我們插件里面需要有個方法來檢測用戶調(diào)用插件時傳入的參數(shù)是否符合規(guī)范。私有方法,檢測參數(shù)是否合法調(diào)用調(diào)用調(diào)用者覆蓋插件暴露的共公方法調(diào)用自定義高亮插件 本文實例講述了jQuery插件編寫步驟。分享給大家供大家參考,具體如下: 如今做web開發(fā),jquery 幾乎是必不可少的,就連vs神器在2010版本開始將Jquery 及ui 內(nèi)置web項目里了。至于使用jq...

    Alex 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<