jQuery.extend( target, object1 [, objectN ] )Возвращает: Объект
Описание: Объединяет содержимое двух или более объектов в первый объект.
-
версия добавлена: 1.0jQuery.extend( target, object1 [, objectN ] )
-
версия добавлена: 1.1.4jQuery.extend( [deep ], target, object1 [, objectN ] )
- deepТип: БулевоЕсли true, объединение становится рекурсивным (т.е. глубокая копия). Передача
falseдля этого аргумента не поддерживается. - targetТип: ОбъектОбъект для расширения. Он получит новые свойства.
- object1Тип: ОбъектОбъект, содержащий дополнительные свойства для объединения.
- objectNТип: ОбъектДополнительные объекты, содержащие свойства для объединения.
-
-
версия добавлена: 1.0jQuery.extend( object )
- objectТип: ОбъектОбъект для объединения в пространство имен jQuery.
-
Когда два или более объекта-аргумента передаются в $.extend(), свойства из всех объектов добавляются в целевой объект. Аргументы, которые являются null или undefined игнорируются.
Если передан только один аргумент в $.extend(), это означает, что аргумент целевого объекта был опущен. В этом случае предполагается, что целевым объектом является сам объект jQuery. Это полезно для авторов плагинов, желающих добавить новые методы в jQuery.
Обратите внимание, что целевой объект (первый аргумент) будет изменен и также будет возвращен функцией $.extend(). Если, однако, вы хотите сохранить оба исходных объекта, вы можете сделать это, передав пустой объект в качестве целевого:
var object = $.extend({}, object1, object2); Объединение, выполняемое $.extend(), по умолчанию не рекурсивное; если свойство первого объекта является самим по себе объектом или массивом, оно будет полностью перезаписано свойством с тем же ключом во втором или последующих объектах. Значения не объединяются. Это можно увидеть в примере ниже, рассмотрев значение banana. Однако, передавая true для первого аргумента функции, объекты будут объединяться рекурсивно.
Предупреждение: В версиях до 3.4 была проблема безопасности, когда вызов jQuery.extend(true, {}, object) на несанизированном объекте, содержащем свойство __proto__, расширял Object.prototype.
Предупреждение: Передача false для первого аргумента не поддерживается.
Неопределенные свойства не копируются. Однако, свойства, унаследованные от прототипа объекта, будут скопированы. Свойства, являющиеся объектами, созданными с помощью new MyCustomObject(args), или встроенными типами JavaScript, такими как Date или RegExp, не перестраиваются и будут отображаться как простые объекты в результирующем объекте или массиве.
При расширении deep расширяются объекты Object и Array, но обертки объектов над примитивными типами, такими как String, Boolean и Number, не расширяются. Глубокое расширение циклической структуры данных приведет к ошибке.
Для потребностей, выходящих за рамки этого поведения, напишите пользовательский метод extend или используйте библиотеку, такую как lodash.
Примеры:
Объединение двух объектов, изменяя первый.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.extend demo</title>
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
<div id="log"></div>
<script>
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
};
// Merge object2 into object1
$.extend( object1, object2 );
// Assuming JSON.stringify - not available in IE<8
$( "#log" ).append( JSON.stringify( object1 ) );
</script>
</body>
</html> Демо:
Рекурсивное объединение двух объектов, изменяя первый.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.extend demo</title>
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
<div id="log"></div>
<script>
var object1 = {
apple: 0,
banana: { weight: 52, price: 100 },
cherry: 97
};
var object2 = {
banana: { price: 200 },
durian: 100
};
// Merge object2 into object1, recursively
$.extend( true, object1, object2 );
// Assuming JSON.stringify - not available in IE<8
$( "#log" ).append( JSON.stringify( object1 ) );
</script>
</body>
</html> Демо:
Объединение значений по умолчанию и опций без изменения значений по умолчанию. Это распространенная модель разработки плагинов.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.extend demo</title>
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
</head>
<body>
<div id="log"></div>
<script>
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
// Merge defaults and options, without modifying defaults
var settings = $.extend( {}, defaults, options );
// Assuming JSON.stringify - not available in IE<8
$( "#log" ).append( "<div><b>defaults -- </b>" + JSON.stringify( defaults ) + "</div>" );
$( "#log" ).append( "<div><b>options -- </b>" + JSON.stringify( options ) + "</div>" );
$( "#log" ).append( "<div><b>settings -- </b>" + JSON.stringify( settings ) + "</div>" );
</script>
</body>
</html>