jQuery.extend()
jQuery.extend( target, [ object1 ], [ objectN ] ) 返回: Object
描述: 合并兩個或更多的對象的內(nèi)容匯集成到第一個對象。
-
version added: 1.0jQuery.extend( target, [ object1 ], [ objectN ] )
target 一個對象,如果附加的對象被傳遞給這個方法將那么它將接收新的屬性,如果它是唯一的參數(shù)將擴展jQuery的命名空間。
object1一個對象,它包含額外的屬性合并到第一個參數(shù)
objectN包含額外的屬性合并到第一個參數(shù)
-
version added: 1.1.4jQuery.extend( [ deep ], target, object1, [ objectN ] )
deep如果是true,合并成為遞歸(又叫做深拷貝)。
target對象擴展。這將接收新的屬性。
object1一個對象,它包含額外的屬性合并到第一個參數(shù)
objectN包含額外的屬性合并到第一個參數(shù)
當我們提供兩個或多個對象給$.extend(),對象的所有屬性都添加到目標對象。
如果只有一個參數(shù)提供給$.extend(),這意味著目標參數(shù)被省略。在這種情況下,jQuery對象本身被默認為目標。這樣,我們可以在jQuery的命名空間下添加新的功能。這可用于插件作者希望添加新的方法到j(luò)Query。
請記住,目標對象(第一個參數(shù))將被修改,也將通過$.extend()返回。然而,如果我們想保留原對象,我們可以通過傳遞一個空對象作為目標:
var object = $.extend({}, object1, object2);
通過$.extend()合并執(zhí)行默認不是遞歸的;如果第一個對象的屬性本身是一個對象或數(shù)組,這將是完全用第二個對象相同的key重寫一個屬性。這些值是不合并。這可以看到在下面的例子通過檢查香蕉的值。然而,true為第一個函數(shù)參數(shù),對象將被遞歸合并。
未定義的屬性不會被復(fù)制。然而,從對象原型的繼承屬性將被復(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" }