Аргументы
jQuery.extend( цель, [ объект1 ], [ объектN ] )
jQuery.extend( [ глубина ], цель, объект1, [ объектN ])
true, слияние происходит рекурсивно (aka. глубокая копия).
Когда мы поставляем два или более объектов в $.extend(),
свойства со всех объектов добавляются к объекту цели.
Если поставляется только один аргумент в $.extend(),
это означает, что аргумент цели был пропущен.
В этом случае сам объект jQuery является целью.
Делая это, мы можем добавить новые функции к пространству имен jQuery.
Это может быть полезно для прагинов авторов желяющих добавить новые методы в
jQuery.
Имейте в виду, что целевой объект (первый аргумент) будет изменен,
а также будет возвращен из $.extend().
Однако, если мы хотим сохранить оригинальные объекты, мы можем сделать это с помощью отправки пустого объекта как цели:
var object = $.extend({}, object1, object2);
Слияние выполняемое $.extend() по умолчанию не рекурсивное; если свойство первого объекта сам объект или массив,
он будет полностью переписан свойством с тем же ключом во втором объекте.
Значения не сливаются в месте.
Это можно видеть в примере ниже путем изучения значения банана.
Тем в случае передачи true для аргумента первой функции,
объекты будут соедененны рекурсивно.
Неопределенные свойства не копируются. Тем не менее, свойства унаследованные из прототипа объекта будут перезаписанны.
Примеры
Пример 1
Соединяет два объекта, модифицируя первый.
var object1 = {
apple: 0,
banana: {weight: 52, price: 100},
cherry: 97
};
var object2 = {
banana: {price: 200},
durian: 100
};
$.extend(object1, object2);
Пример 2
Соединяет два объекта рекурсивно, модифицируя первый.
var object1 = {
apple: 0,
banana: {weight: 52, price: 100},
cherry: 97
};
var object2 = {
banana: {price: 200},
durian: 100
};
$.extend(true, object1, object2);
Пример 3
Соединяет настройки и параметры, модифицирует настройки.
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
jQuery.extend(settings, options);
Пример 4
Соединяет параметры по умолчанию и настройки, не изменяя параметры по умолчанию. Это общая схема разработки плагина.
var empty = {}
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var settings = $.extend(empty, defaults, options);

