jQuery.extend()

admin發表於2018-02-02

此方法可以用一個或者多個物件來擴充套件指定的物件,並返回擴充套件後的物件。

語法結構一:

[JavaScript] 純文字檢視 複製程式碼
jQuery.extend(target [, object1 ] [, objectN ])

引數解析:

(1).target:一個物件,目標物件,object1-objectN物件的屬性或者方法將會被附加到它身上,如果target是唯一的引數,那麼它將被附加到jQuery物件(類)。

(2).object1-objectN:可選,它們的屬性或者方法將會被附加到target物件身上。

jQuery1.0版本新增。

語法結構二:

[JavaScript] 純文字檢視 複製程式碼
jQuery.extend([deep ], target, object1 [, objectN ])

引數解析:

(1).deep:可選,布林值,用來指示是否進行深度拷貝;true為深度拷貝,false為淺拷貝,預設false。特別說明:預設是false,但是我們不能顯示規定引數是false,不會進行合併操作。

(2).target:一個物件,目標物件,object1-objectN物件的屬性或者方法將會被附加到它身上,如果target是唯一的引數,那麼它將被附加到jQuery物件(類)。

(3).object1-objectN:可選,它們的屬性或者方法將會被附加到target物件身上。

jQuery1.1.4版本新增。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var antzone={
  webName:"螞蟻部落",
  age:3
}
var oneObj={
  address:"青島市南區",
  source:"javascript教程"
}
var twoObj={
  target:"互助學習",
  enName:"antzone"
}
jQuery.extend(antzone,oneObj,twoObj)
console.log(antzone)

以上程式碼可以將物件oneObj和twoObj擴充套件至物件antzone,也就是說原物件antzone已經被修改。

結果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201702/19/183228wak46q5m62424apo.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

如果僅僅是單純合併object1至objectN物件,可以將target設定為一個空物件,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var oneObj={
  address:"青島市南區",
  source:"javascript教程"
}
var twoObj={
  target:"互助學習",
  enName:"antzone"
}
jQuery.extend({},oneObj,twoObj)
console.log(jQuery.extend({},oneObj,twoObj))

合併後的結果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201702/19/183412kljj2rj82ywf8wzr.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

如果方法只有一個引數,也就是說只有target引數,那麼就是將其擴充套件至jQuery物件,程式碼如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
jQuery.extend({func:function(){
  console.log("螞蟻部落");
}})
jQuery.func()

也就是為jQuery新增了一個靜態方法。

深度拷貝:

下面就介紹一下此方法的第一個引數deep,它是一個布林值,如果為true表示進行深度拷貝。

先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var antzone={
  webName:"螞蟻部落",
  age:3,
  innerObj:{
    done:"奮鬥"
  }
}
var Obj={
  address:"青島市南區",
  innerObj:{
    target:"互助學習",
    enName:"antzone"
  }
}
jQuery.extend(antzone,Obj)
console.log(antzone)

兩個物件內部都有巢狀的物件innerObj,但是合併結果是第二個覆蓋了第一個物件,截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201702/19/183548zu36dbq3dbbugug8.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼如下改成深度拷貝以後執行結果如下:

a:3:{s:3:\"pic\";s:43:\"portal/201702/19/183614urts2ni2m28t2nqh.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

從以上程式碼可以看出,內部巢狀的物件也進行了合併。當然內部巢狀的物件必須是同名的。