Объединение объектов

$.extend()

Объединяет содержимое двух или более заданных javascript-объектов. Результат объединения записывается в первый из этих объектов (он же будет возвращен функцией, после ее выполнения). Функция имеет два варианта использования:

$.extend(target,[object1],..,[objectN]):Object1.0

объединяет содержимое объектов target, object1,.., objectN, помещая результат в объект target.

$.extend([deep],target,[object1],..,[objectN]):Object1.1.4

объединяет содержимое заданных объектов как и в предыдущем случае. Если параметр deep равен true, объединение будет выполнено рекурсивно (по принципу глубокого копирования. Подробности см. ниже).

Особенности использования

Если задать два или более объекта, то результатом будет их объединение. В случае, если вы зададите только один объект, функция extend() добавит его содержимое в глобальный объект $ (jQuery). Таким образом можно расширять возможности библиотеки, добавляя свои функции в ее пространство имен. Это может быть полезно при написании плагинов.

Напомним, что в результате объединения объектов, первый из них будет изменен (он же будет возвращен в качестве результата выполнения функции extend()). Если нужно, чтобы ни один из заданных объектов не был изменен, то можно задать в качестве параметра target пустой объект:

var object = $.extend({}, object1, object2);

Рекурсивное (глубокое) копирование

При объединении объектов, совпадающие поля переписываются:

var object1 = {
  apple:0,
  cherry:97
};
var object2 = {
  apple:5,
  durian:100
};
 
$.extend(object1, object2);
 
/* Результат будет следующий:
{
  apple:5,
  cherry:97,
  durian:100
};
*/

По умолчанию, extend() выполняет поверхностное объединение объектов, это означает, что если они содержат другие объекты внутри, то extend() будет перезаписывать их как и в предыдущем случае:

var object1 = {
  apple:0,
  banana:{weight:52, price:100},
  cherry:97
};
var object2 = {
  banana:{price:200},
  durian:100
};
 
$.extend(object1, object2);
/* Результат:
{
  apple:0,
  banana:{price:200},
  durian:100,
  cherry:97,
};
*/

однако, если в качестве первого параметра указать true, то будет выполнено глубокое копирование, при котором к внутренним объектам будет применяться процедура объединения (а не переписывания как в прошлом случае):

var object1 = {
  apple:0,
  banana:{weight:52, price:100},
  cherry:97
};
var object2 = {
  banana:{price:200},
  durian:100
};
 
$.extend(true, object1, object2);
/* Результат:
{
  apple:0,
  banana:{weight:52, price:200},
  durian:100,
  cherry:97,
};
*/

Ссылки

Поисковые ключи:
  • объединение объектов
  • слияние объектов
  • .extend()
  • extend()