這裡多謝某童鞋的提醒!說我的上篇隨筆jquery插件開發的方式一還還可用於合併參數和深clone,雖然方式二中用了方式一做參數合併,但並未詳細介紹,所以今天在此處做點補充! 一、合併參數 jquery的extend擴展原型: 返回值未arg1,arg2……合併到arg。這裡就有兩種用法。 省略arg ...
這裡多謝某童鞋的提醒!說我的上篇隨筆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 !