這里多謝某童鞋的提醒!說我的上篇隨筆jquery插件開發的方式一還還可用於合並參數和深clone,雖然方式二中用了方式一做參數合並,但並未詳細介紹,所以今天在此處做點補充!
一、合並參數
jquery的extend擴展原型:
extend(arg,arg1,arg2,……);
返回值未arg1,arg2……合並到arg。這里就有兩種用法。
-
省略arg參數,則arg1,arg2……合並后返回。
var results=$.extend({name:'nick'},{sex:'handsome'});
//那么,返回值為
results={name:'nick',sex:'handsome'};
自定義arg參數,則返回自定義類型的arg。如:
//這里定義arg為一個對象
var results=$.extend({},{name:'nick'},{sex:'handsome'});
//那么,返回值為arg對象
results={name:'nick',sex:'handsome'};
//這里定義arg為一個數組
var results=$.extend([],{name:'nick'},{sex:'handsome'});
//那么,返回值為arg數組
results=[name:'nick',sex:'handsome'];
注意:
合並參數時,若$.extend()中參數的屬性名沖突了,則后面的值會替換前面的值。
//這里定義arg為一個對象
var results=$.extend({},{name:'nick',sex:'male'},{sex:'handsome'});
//那么,返回值為arg對象。sex屬性沖突,則后面的值handsome替換male
results={name:'nick',sex:'handsome'};
二、clone
jquery的extend的clone為:
$.extend(boolean,arg,arg1,arg2……);
-
boolean為true時,深clone:
var results=$.extend(true,{},{user:{name:'nick',love:'money'},age:25},{user:{name:'summer',like:'car'},sex:'handsome'});
//返回值
results={"user":{"name":"summer","love":"money","like":"car"},"age":25,"sex":"handsome"};
-
boolean為false時(默認):
var results=$.extend(false,{},{user:{name:'nick',love:'money'},age:25},{user:{name:'summer',like:'car'},sex:'handsome'});
//返回值
results={"user":{"name":"summer","like":"car"},"age":25,"sex":"handsome"};
親們,注意到了麽?好好看看返回值!
注意:
- $.extend()用於clone時最好將boolean設為true。
- 由於jquery早期版本只有淺clone,不過后面的版本修復了,所以使用jquery cdn時盡量使用較高版本。
最后本想附上jquery相關源碼,但不想浪費篇幅,建議大家在源碼里搜索 jQuery.extend !