В библиотеке Zepto работа с объектами и их
свойствами реализована через утилитарные методы, аналогичные jQuery, но
с оптимизированной и облегчённой структурой. Один из ключевых
инструментов — функция $.extend, которая
позволяет объединять объекты, копировать свойства и создавать новые
конфигурации без изменения исходных данных.
$.extend$.extend(target, object1, object2, ...);
target — объект, в который будут
скопированы свойства из последующих объектов.object1, object2, ... — объекты,
свойства которых будут добавлены или перезаписаны в
target.Если передать пустой объект в качестве target, можно
создать новый объект, не изменяя исходные:
var defaults = {color: "blue", size: "medium"};
var options = {size: "large"};
var settings = $.extend({}, defaults, options);
// settings: {color: "blue", size: "large"}
Здесь options перезаписывает значение
свойства size из объекта
defaults, при этом исходные объекты
остаются неизменными.
По умолчанию $.extend выполняет
поверхностное копирование. Для вложенных объектов это
значит, что внутренние свойства могут быть потеряны при перезаписи. Для
решения этой задачи Zepto поддерживает глубокое
слияние, если первый аргумент — true:
var obj1 = {user: {name: "Alice", age: 25}};
var obj2 = {user: {age: 30, city: "Moscow"}};
var merged = $.extend(true, {}, obj1, obj2);
// merged: {user: {name: "Alice", age: 30, city: "Moscow"}}
true указывает на рекурсивное
копирование.$.extendПерезапись свойств При совпадении ключей значение из последнего объекта имеет приоритет.
Работа с любыми типами данных Поддерживаются строки, числа, массивы, объекты. Функции копируются как ссылки.
Избежание мутации исходных объектов Создание
нового объекта через пустой target позволяет безопасно
объединять данные.
Глубокое копирование Для вложенных структур и массивов используется рекурсивный алгоритм, который предотвращает потерю данных.
Слияние простых настроек:
var defaults = {volume: 50, muted: false};
var userSettings = {muted: true};
var finalSettings = $.extend({}, defaults, userSettings);
// {volume: 50, muted: true}
Объединение массивов и вложенных объектов:
var objA = {list: [1, 2], info: {lang: "en"}};
var objB = {list: [3, 4], info: {version: "1.0"}};
var combined = $.extend(true, {}, objA, objB);
// {list: [3, 4], info: {lang: "en", version: "1.0"}}
Обратите внимание, что массивы не объединяются автоматически; массивы полностью перезаписываются последним объектом.
Использование для расширения плагинов:
(function($){
$.fn.tooltip = function(options) {
var defaults = {color: "black", fontSize: "12px"};
var settings = $.extend({}, defaults, options);
return this.each(function() {
$(this).css({
color: settings.color,
fontSize: settings.fontSize
});
});
};
})(Zepto);
$('p').tooltip({color: "red"});
В этом примере $.extend объединяет
настройки по умолчанию с пользовательскими параметрами, обеспечивая
гибкость плагина.
{} в качестве
target, если важно сохранить исходные объекты
неизменными.true),
только когда есть вложенные объекты. Для плоских структур это лишняя
операция.Zepto реализует $.extend почти идентично jQuery, но
не поддерживает слияние некоторых редких типов
объектов, например, объектов с нестандартными прототипами.
Основное преимущество — легковесность и высокая производительность на
мобильных устройствах при работе с небольшими и средними объектами.
С помощью $.extend в Zepto можно легко управлять
объектами, конфигурациями и плагинами, обеспечивая чистую
структуру данных, повторное использование и безопасное
расширение функционала без изменения исходных объектов.