亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery源碼解讀之extend()與工具方法、實例方法詳解

2019-11-19 16:58:42
字體:
來源:轉載
供稿:網友

本文實例講述了jQuery源碼解讀之extend()與工具方法、實例方法。分享給大家供大家參考,具體如下:

使用jQuery的時候會發現,jQuery中有的函數是這樣使用的:

$.get();$.post();$.getJSON();

有些函數是這樣使用的:

$('div').css();$('ul').find('li');

有些函數是這樣使用的:

$('li').each(callback);$.each(lis,callback);

這里涉及到兩個概念:工具方法與實例方法。通常我們說的工具方法是指無需實例化就可以調用的函數,如第一段代碼;實例方法是必須實例化對象以后才可以調用的函數,如第二段代碼。jQuery中很多方法既是實例方法也是工具方法,只是調用方式略有不同,如第三段代碼。為了更清晰解釋JavaScript中的工具方法與實例方法,進行如下測試。

function A(){}A.prototype.fun_p=function(){console.log("prototpye");};A.fun_c=function(){console.log("constructor");};var a=new A();A.fun_p();//A.fun_p is not a functionA.fun_c();//constructora.fun_p();//prototpyea.fun_c();//a.fun_c is not a function

通過以上測試可以得出結論,在原型中定義的是實例方法,在構造函數中直接添加的是工具方法;實例方法不能由構造函數調用,同理,工具方法也不能由實例調用。

當然實例方法不僅可以在原型中定義,有以下三種定義方法:

function A(){    this.fun_f=function(){        console.log("Iam in the constructor");    };}A.prototype.fun_p=function(){    console.log("Iam in the prototype");};var a=new A();a.fun_f();//Iam in the constructora.fun_i=function(){    console.log("Iam in the instance");};a.fun_i();//Iam in the instancea.fun_p();//Iam in the prototype

這三種方式的優先級為:直接定義在實例上的變量的優先級要高于定義在“this”上的,而定義在“this”上的又高于 prototype定義的變量。即直接定義在實例上的變量會覆蓋定義在“this”上和prototype定義的變量,定義在“this”上的會覆蓋prototype定義的變量。

下面看jQuery中extend()方法源碼:

jQuery.extend = jQuery.fn.extend = function() {    var options,name, src, copy, copyIsArray, clone,        target= arguments[0] || {},        i =1,        length= arguments.length,        deep= false;    // Handle adeep copy situation    if ( typeoftarget === "boolean" ) {        deep= target;        //Skip the boolean and the target        target= arguments[ i ] || {};        i++;    }    // Handlecase when target is a string or something (possible in deep copy)    if ( typeoftarget !== "object" && !jQuery.isFunction(target) ) {        target= {};    }    // ExtendjQuery itself if only one argument is passed    if ( i ===length ) {        target= this;        i--;    }    for ( ; i< length; i++ ) {        //Only deal with non-null/undefined values        if ((options = arguments[ i ]) != null ) {            //Extend the base object            for( name in options ) {                src= target[ name ];                copy= options[ name ];                //Prevent never-ending loop                if( target === copy ) {                   continue;                }                //Recurse if we're merging plain objects or arrays                if( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray= jQuery.isArray(copy)) ) ) {                   if( copyIsArray ) {                       copyIsArray= false;                       clone= src && jQuery.isArray(src) ? src : [];                   }else {                       clone= src && jQuery.isPlainObject(src) ? src : {};                   }                   //Never move original objects, clone them                   target[name ] = jQuery.extend( deep, clone, copy );                //Don't bring in undefined values                }else if ( copy !== undefined ) {                   target[name ] = copy;                }            }        }    }    // Returnthe modified object    return target;};

(1)首先,jQuery和其原型中extend()方法的實現使用的同一個函數。

(2)當extend()中只有一個參數的時候,是為jQuery對象添加插件。在jQuery上擴展的叫做工具方法,在jQuery.fn(jQuery原型)中擴展的是實例方法,即使在jQuery和原型上擴展相同名字的函數也可以,使用jQuery對象會調用工具方法,使用jQuery()會調用實例方法。

(3)當extend()中有多個參數時,后面的參數都擴展到第一個參數上。

var a={};$.extend(a,{name:"hello"},{age:10});console.log(a);//Object{name: "hello", age: 10}

(4)淺拷貝(默認):

var a={};varb={name:"hello"};$.extend(a,b);console.log(a);//Object{name: "hello"}a.name="hi";console.log(b);//Object{name: "hello"}

b不受a影響,但是如果b中一個屬性為對象:

var a={};varb={name:{age:10}};$.extend(a,b);console.log(a.name);//Object{age: 10}a.name.age=20;console.log(b.name);//Object{age: 20}

由于淺拷貝無法完成,則b.name會受到a的影響,這時我們往往希望深拷貝。

深拷貝:

var a={};varb={name:{age:10}};$.extend(true,a,b);console.log(a.name);//Object{age: 10}a.name.age=20;console.log(b.name);//Object{age: 10}

b.name不受a的影響。

var a={name:{job:"Web Develop"}};var b={name:{age:10}};$.extend(true,a,b);console.log(a.name);//age: 10 job: "Web Develop"http://b.name沒有覆蓋a.name.job。

更多關于jQuery相關內容感興趣的讀者可查看本站專題:《jQuery擴展技巧總結》、《jQuery常用插件及用法總結》、《jQuery切換特效與技巧總結》、《jQuery遍歷算法與技巧總結》、《jQuery常見經典特效匯總》、《jQuery動畫與特效用法總結》及《jquery選擇器用法總結

希望本文所述對大家jQuery程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品乱码久久久久久按摩观| 国产一区二区成人| 中文字幕9999| 亚洲乱码av中文一区二区| 国产精品成人v| 国产精品久久视频| 国产精品av电影| 91精品综合视频| 成人美女av在线直播| 免费97视频在线精品国自产拍| 日韩中文第一页| 清纯唯美日韩制服另类| 国产成人精品久久二区二区| 亚洲黄色成人网| 国产啪精品视频网站| 成人国产精品色哟哟| 欧美精品中文字幕一区| 久久成人18免费网站| 欧美午夜性色大片在线观看| 青青在线视频一区二区三区| 欧美精品videosex极品1| 欧美日韩中国免费专区在线看| 奇米一区二区三区四区久久| 亚洲欧美中文字幕| 视频在线一区二区| 91人人爽人人爽人人精88v| 亚洲一区二区中文| 亚洲午夜未满十八勿入免费观看全集| 精品久久久在线观看| 国产日韩欧美视频| 91经典在线视频| 亚洲国产成人久久综合一区| 亚洲偷欧美偷国内偷| 国产精品久久久久久av福利软件| 91精品国产91久久久久久最新| 国产精品美女主播在线观看纯欲| 日韩av在线电影网| 韩剧1988在线观看免费完整版| 欧美黄色片视频| 精品中文字幕在线观看| 日韩成人在线视频观看| 欧美精品18videos性欧| 在线成人中文字幕| 神马久久桃色视频| 国产精品mp4| 中文字幕无线精品亚洲乱码一区| 国产精品视频播放| 久久久999精品| 国产精品久久久久久久久影视| 91社区国产高清| 97精品在线视频| 亚洲风情亚aⅴ在线发布| 亚洲精品电影网站| 亚州精品天堂中文字幕| 欧美在线视频a| 亚洲成人免费在线视频| 欧美成人一区二区三区电影| 九九九热精品免费视频观看网站| 久久国产精品免费视频| 亚洲精品www| 精品少妇v888av| 黑人欧美xxxx| 精品国内自产拍在线观看| 夜色77av精品影院| 国产成人精品视频在线观看| 成人日韩av在线| 久久久av一区| 98精品国产自产在线观看| 日韩精品免费电影| 美日韩精品视频免费看| 亚洲**2019国产| 亚洲天堂影视av| 69**夜色精品国产69乱| 欧美男插女视频| 国产在线a不卡| 成人h视频在线| 亚洲成人激情在线观看| 国产一区二区三区毛片| 欧美午夜女人视频在线| 久久久精品亚洲| 日韩精品视频在线观看免费| y97精品国产97久久久久久| 亚洲精品福利资源站| 亚洲欧美激情精品一区二区| 欧美性生交xxxxx久久久| 精品少妇v888av| 亚洲欧美在线一区| 久久全球大尺度高清视频| 欧美精品999| 日韩福利在线播放| 欧美日韩性生活视频| 欧美日韩人人澡狠狠躁视频| 久久全国免费视频| 成人精品久久久| 久久久久久久电影一区| 欧美精品videosex性欧美| 庆余年2免费日韩剧观看大牛| 亚洲片av在线| 正在播放国产一区| 久久久免费电影| 日本欧美中文字幕| 久久久久久久亚洲精品| 国产精品丝袜久久久久久高清| 久久精品国产一区| 国产精品99久久久久久人| 久久久久久97| 久久久久国色av免费观看性色| 亚洲最大av网站| 97在线视频一区| 91色p视频在线| 欧美视频在线免费| 国内自拍欧美激情| 国产视频丨精品|在线观看| 国产欧美日韩免费看aⅴ视频| 黑人极品videos精品欧美裸| 亚洲人成欧美中文字幕| 欧美剧在线观看| 欧美性猛交xxxx免费看漫画| 成人有码视频在线播放| 欧美电影免费看| 欧美巨猛xxxx猛交黑人97人| 成人激情视频小说免费下载| 成人高h视频在线| 国产午夜精品全部视频在线播放| 成人黄色中文字幕| 国产mv免费观看入口亚洲| 亚洲欧美日韩第一区| 91在线免费网站| 久久五月天色综合| 国产综合在线观看视频| 亚洲福利视频网站| 精品久久久999| 日韩电影大全免费观看2023年上| 精品一区精品二区| 色与欲影视天天看综合网| 欧美精品久久久久久久| 亚洲在线www| 欧美激情极品视频| 国产亚洲美女精品久久久| 国产日韩综合一区二区性色av| 日本19禁啪啪免费观看www| 欧美国产日韩一区二区在线观看| 在线播放国产一区中文字幕剧情欧美| 久久国产精品久久久久| 国产一区在线播放| 91国产在线精品| 欧美另类第一页| 欧美专区国产专区| 在线观看久久久久久| 亚洲第一页自拍| 国产精品27p| 久久香蕉国产线看观看网| 亚洲精品久久久久久下一站| 深夜福利国产精品| 亚洲成人网久久久| 国产精品99久久久久久人| 国内精品久久久久久中文字幕| 91精品国产91久久| 91精品国产自产在线老师啪| 在线国产精品播放| 欧美激情18p| 性欧美亚洲xxxx乳在线观看| 色先锋资源久久综合5566| 欧美大片免费观看|