ארגומנטים
jQuery.extend( target, [ object1 ], [ objectN ] )
jQuery.extend( [ deep ], target, object1, [ objectN ] )
true,
מיזוג מתרחש רקורסיבי
(aka. deep copy)
.
כאשר אנחנו מספקים שני או יותר אובייקטים ב-
$.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);

