jQuery.extend()
jQuery.extend( target, [ object1 ], [ objectN ] ) 返回: Object
描述: 合并兩個(gè)或更多的對(duì)象的內(nèi)容匯集成到第一個(gè)對(duì)象。
-
version added: 1.0jQuery.extend( target, [ object1 ], [ objectN ] )
target 一個(gè)對(duì)象,如果附加的對(duì)象被傳遞給這個(gè)方法將那么它將接收新的屬性,如果它是唯一的參數(shù)將擴(kuò)展jQuery的命名空間。
object1一個(gè)對(duì)象,它包含額外的屬性合并到第一個(gè)參數(shù)
objectN包含額外的屬性合并到第一個(gè)參數(shù)
-
version added: 1.1.4jQuery.extend( [ deep ], target, object1, [ objectN ] )
deep如果是true,合并成為遞歸(又叫做深拷貝)。
target對(duì)象擴(kuò)展。這將接收新的屬性。
object1一個(gè)對(duì)象,它包含額外的屬性合并到第一個(gè)參數(shù)
objectN包含額外的屬性合并到第一個(gè)參數(shù)
當(dāng)我們提供兩個(gè)或多個(gè)對(duì)象給$.extend(),對(duì)象的所有屬性都添加到目標(biāo)對(duì)象。
如果只有一個(gè)參數(shù)提供給$.extend(),這意味著目標(biāo)參數(shù)被省略。在這種情況下,jQuery對(duì)象本身被默認(rèn)為目標(biāo)。這樣,我們可以在jQuery的命名空間下添加新的功能。這可用于插件作者希望添加新的方法到j(luò)Query。
請(qǐng)記住,目標(biāo)對(duì)象(第一個(gè)參數(shù))將被修改,也將通過(guò)$.extend()返回。然而,如果我們想保留原對(duì)象,我們可以通過(guò)傳遞一個(gè)空對(duì)象作為目標(biāo):
var object = $.extend({}, object1, object2);
通過(guò)$.extend()合并執(zhí)行默認(rèn)不是遞歸的;如果第一個(gè)對(duì)象的屬性本身是一個(gè)對(duì)象或數(shù)組,這將是完全用第二個(gè)對(duì)象相同的key重寫(xiě)一個(gè)屬性。這些值是不合并。這可以看到在下面的例子通過(guò)檢查香蕉的值。然而,true為第一個(gè)函數(shù)參數(shù),對(duì)象將被遞歸合并。
未定義的屬性不會(huì)被復(fù)制。然而,從對(duì)象原型的繼承屬性將被復(fù)制。
Examples:
Example: Merge two objects, modifying the first.
var object1 = {
apple: 0,
banana: {weight: 52, price: 100},
cherry: 97
};
var object2 = {
banana: {price: 200},
durian: 100
};
$.extend(object1, object2);
Result:
object1 === {apple: 0, banana: {price: 200}, cherry: 97, durian: 100}
Example: Merge two objects recursively, modifying the first.
var object1 = {
apple: 0,
banana: {weight: 52, price: 100},
cherry: 97
};
var object2 = {
banana: {price: 200},
lime: 100
};
$.extend(true, object1, object2);
Result:
object1 === {apple: 0, banana: {weight: 52, price: 200}, cherry: 97, lime: 100}
Example: Merge settings and options, modifying settings.
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
jQuery.extend(settings, options);
Result:
settings == { validate: true, limit: 5, name: "bar" }
Example: Merge defaults and options, without modifying the defaults. This is a common plugin development pattern.
var empty = {}
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var settings = $.extend(empty, defaults, options);
Result:
settings == { validate: true, limit: 5, name: "bar" }
empty == { validate: true, limit: 5, name: "bar" }