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

首頁 > 編程 > JavaScript > 正文

jQuery中extend函數詳解

2019-11-20 13:09:22
字體:
來源:轉載
供稿:網友

在jQuery的API手冊中,我們看到,extend實際上是掛載在jQuery和jQuery.fn上的兩個不同方法,盡管在jQuery內部jQuery.extend()和jQuery.fn.extend()是用相同的代碼實現的,但是它們的功能卻不太一樣。來看一下 官方API對extend 的解釋:

代碼如下:

復制代碼 代碼如下:

jQuery.extend(): Merge the contents of two or more objects together into the first object.(把兩個或者更多的對象合并到第一個當中)
jQuery.fn.extend():Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.(把對象掛載到jQuery的prototype屬性,來擴展一個新的jQuery實例方法)

我們知道,jQuery有靜態方法和實例方法之分, 那么jQuery.extend()和jQuery.fn.extend()的第一個區別就是一個用來擴展靜態方法,一個用來擴展實例方法。用法如下:

復制代碼 代碼如下:

jQuery.extend({
sayhello: function (){
console.log( "Hello,This is jQuery Library" );
}
})
$.sayhello(); //Hello, This is jQuery Library
jQuery.fn.extend({
check: function () {
return this .each( function () {
this .checked = true ;
});
},
uncheck: function () {
return this .each( function () {
this .checked = false ;
});
}
})
$( "input[type='checkbox']" ).check(); //所有的checkbox都會被選擇

注意兩種調用插件的方式,一種是直接用$調用,另外一種是用$()調用,另外jQuery.extend()接收多個對象作為參數,如果只有一個參數,則把這個對象的屬性方法附加到jQuery上,如果含有多個參數,則把后面的對象的屬性和方法附加到第一個對象上。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 a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
if ( length === i ) {
target = this ;
--i;
}
for ( ; i < length; i++ ) {
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 ;
}
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 : {};
}
target[ name ] = jQuery.extend( deep, clone, copy );
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
// Return the modified object
return target;
};

很大一堆代碼,乍看起來難以理解,其實代碼的大部分都是用來實現jQuery.extend()中有多個參數時的對象合并,深度拷貝問題,如果去掉這些功能,讓extend只有擴展靜態和實例方法的功能,那么代碼如下:

復制代碼 代碼如下:

jQuery.extend = jQuery.fn.extend = function (obj){
//obj是傳遞過來擴展到this上的對象
var target= this ;
for ( var name in obj){
//name為對象屬性
//copy為屬性值
copy=obj[name];
//防止循環調用
if (target === copy) continue ;
//防止附加未定義值
if ( typeof copy === 'undefined' ) continue ;
//賦值
target[name]=copy;
}
return target;
}

下面再來對extend方法進行注釋解釋:

復制代碼 代碼如下:

jQuery.extend = jQuery.fn.extend = function () {
// 定義默認參數和變量
// 對象分為擴展對象和被擴展的對象
//options 代表擴展的對象中的方法
//name 代表擴展對象的方法名
//i 為擴展對象參數起始值
//deep 默認為淺復制
var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false ;
//對接下來的參數進行處理
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
i = 2;
}
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
if ( length === i ) {
target = this ;
--i;
}
//對從i開始的多個參數進行遍歷
for ( ; i < length; i++ ) {
// 只處理有定義的值
if ( (options = arguments[ i ]) != null ) {
// 展開擴展對象
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
// 防止循環引用
if ( target === copy ) {
continue ;
}
// 遞歸處理深拷貝
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 : {};
}
target[ name ] = jQuery.extend( deep, clone, copy );
// 不處理未定義值
} else if ( copy !== undefined ) {
//給target增加屬性或方法
target[ name ] = copy;
}
}
}
}
//返回
return target;
};

弄懂了jQuery擴展的原理,相信以后再也不用為編寫jQuery插件而煩惱了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91极品女神在线| 亚洲综合一区二区不卡| 亚洲一区二区三区四区在线播放| 欧美剧在线观看| 日韩欧美国产免费播放| 精品视频一区在线视频| 欧美精品久久一区二区| 国产日韩欧美中文| 亚洲一区二区三区xxx视频| 日韩欧美福利视频| 亚洲视频一区二区三区| 亚洲va欧美va国产综合剧情| 亚洲欧美制服另类日韩| 日韩免费在线免费观看| 正在播放欧美视频| 国产精品日韩av| 国产成人精品久久二区二区91| 国产精品视频久| 国内精久久久久久久久久人| 丁香五六月婷婷久久激情| 秋霞午夜一区二区| 日韩欧美精品免费在线| 亚洲欧美国产精品va在线观看| 欧美午夜宅男影院在线观看| 久久久久久尹人网香蕉| 欧美专区日韩视频| 欧美日韩综合视频网址| 国产在线观看不卡| 欧美在线一级视频| 狠狠干狠狠久久| 国产日韩欧美在线| 久久久91精品国产一区不卡| 亚洲综合第一页| 亚洲精品一区二区三区婷婷月| 亚洲在线视频福利| 欧美高清视频一区二区| 爽爽爽爽爽爽爽成人免费观看| 久久成人免费视频| 日韩有码在线视频| 欧美夜福利tv在线| 国产精品福利网站| 欧美在线视频网| 亚洲国产精品高清久久久| 国产精品综合不卡av| 国产成人小视频在线观看| 久久99久久久久久久噜噜| 亚洲人成伊人成综合网久久久| 亚洲字幕一区二区| 成人美女av在线直播| 久久久久久com| 亚洲aa在线观看| 欧美肥婆姓交大片| 国产欧美婷婷中文| 91欧美精品午夜性色福利在线| 久久福利视频网| 欧美大成色www永久网站婷| 成人av番号网| 91老司机精品视频| 亚洲国产精品字幕| 亚洲第一天堂无码专区| 国产精品免费福利| 亚洲国产精品推荐| 性欧美长视频免费观看不卡| 国产精品96久久久久久又黄又硬| 欧美精品精品精品精品免费| 国产在线拍偷自揄拍精品| 亚洲欧美色图片| 日韩欧美中文字幕在线观看| 亚洲国产97在线精品一区| 精品少妇一区二区30p| 97国产精品久久| 欧美一区视频在线| 国产精品情侣自拍| 在线观看国产精品日韩av| 日韩禁在线播放| 国产999精品久久久影片官网| 亚洲日本成人网| 最新日韩中文字幕| 国产91色在线|免| 91沈先生在线观看| 久久夜色精品国产欧美乱| 日韩精品视频在线| 日韩电视剧免费观看网站| 最近更新的2019中文字幕| 国产亚洲欧美另类中文| 亚洲欧美中文日韩在线| 国产美女直播视频一区| 日韩第一页在线| 亚洲人成电影网站色…| 国产成人在线亚洲欧美| 亚洲精品国产美女| 久久久91精品国产一区不卡| 国模精品视频一区二区| 欧美极品美女电影一区| 亚洲人成欧美中文字幕| 国产精品美女无圣光视频| 日韩精品在线观看一区二区| 久久最新资源网| 91精品国产高清自在线| 中文字幕亚洲精品| 亚洲欧美日韩一区二区三区在线| 高清欧美性猛交| 国产精品永久免费观看| 国产精品久久久久久网站| 亚洲国产精品99久久| 日本a级片电影一区二区| 成人免费福利在线| 国产成人在线一区二区| 国产丝袜精品第一页| 亚洲男人天天操| 国产精品入口福利| 91网站免费观看| 欧美激情第1页| 91亚洲国产成人久久精品网站| 国产精品观看在线亚洲人成网| 91网站免费观看| 国产精品久久久久免费a∨| 欧美激情精品在线| 精品国偷自产在线视频99| 51精品国产黑色丝袜高跟鞋| 国产aⅴ夜夜欢一区二区三区| 国产精品专区一| 欧美性videos高清精品| 日韩电影免费观看在线观看| 亚洲国产精品久久久久| 久久精品中文字幕电影| 国产欧美日韩精品丝袜高跟鞋| 色悠悠久久久久| 日韩欧美一区二区在线| 欧美在线一区二区三区四| 伊人久久精品视频| 国产欧美精品一区二区三区-老狼| 自拍亚洲一区欧美另类| 精品国产福利视频| 欧美三级欧美成人高清www| 国语自产在线不卡| 欧美性xxxx极品hd满灌| 欧美裸体男粗大视频在线观看| 日韩精品极品在线观看| 日韩av电影在线网| 欧美巨猛xxxx猛交黑人97人| 精品日韩美女的视频高清| 亚洲视频欧洲视频| 一区二区三区精品99久久| 欧美日本黄视频| 日韩美女视频中文字幕| 欧美黄网免费在线观看| 欧美性猛交xxxx黑人猛交| 91精品成人久久| 国产午夜精品理论片a级探花| 国产欧美一区二区| 欧美wwwxxxx| 欧美日韩国产激情| 久久69精品久久久久久国产越南| 中文字幕久久久av一区| 91久久中文字幕| 亚洲97在线观看| 国产精品444| 国产精品免费视频xxxx| 在线观看欧美成人| 欧美亚洲成人精品| 亚洲**2019国产| 中文精品99久久国产香蕉| 在线视频欧美日韩精品|