Spec-Zone.ru › jQuery

jQuery.extend()

jQuery.extend( target, object1 [, objectN ] )Возвращает: Объект

Описание: Объединяет содержимое двух или более объектов в первый объект.

  • версия добавлена: 1.0jQuery.extend( target, object1 [, objectN ] )

    • 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>

Демо:

© The jQuery Foundation and other contributors
Licensed under the MIT License.
https://api.jquery.com/jQuery.extend

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API