J'ai vu cela dans un plugin:
var options = $.extend(defaults, options);
Comment ça marche?
Que fait extend()
-on?
jquery
jquery-plugins
Todd Terry
la source
la source
Réponses:
Paramètres multiples
La documentation n'est pas précise pour expliquer le fonctionnement de l'extension, j'ai donc effectué un petit test:
(La
console.log
fonction est destinée à fonctionner dans Firebug; remplacez-la par alert () ou une autre fonction de sortie si vous le souhaitez).Les résultats sont:
Par cela, nous pouvons voir que jQuery.extend ():
Ceci est utile pour combiner les objets option utilisateur et par défaut ensemble pour obtenir un ensemble complet d'options:
Notez que "null" est une valeur valide pour l'écrasement, mais que "non défini" ne l'est pas. Vous pourrez peut-être en profiter.
Résulte en:
Paramètre unique
Si vous passez un seul objet à
jQuery.extend()
, alors jQuery suppose que l'jQuery
objet lui - même est le "premier" paramètre (c'est-à-dire: celui à modifier), et votre objet est le "second" (c'est-à-dire: celui à ajouter au premier) . Alors:Résulte en:
la source
{zed: 'dark'}
plutôt que2
et que vous définissezr.baz.zed = 'light'
, quelle serait la valeur deb.baz.zed
être? c'est-à-dire que les propriétés sont copiées ou fusionnées par référence?b.baz.zed
seraitlight
- c'est-à-dire que les valeurs sont fusionnées par référence. voir un violonIl fusionne le contenu d'un objet dans un autre . Si nous passons deux objets, les propriétés du second objet sont ajoutées au premier objet / premier paramètre
Maintenant, object1 contient les propriétés de object2
Si nous voulons fusionner deux objets , nous devons passer un objet vide dans le premier paramètre
Maintenant, newObject contient à la fois les propriétés d'objet1 et d'objet2 .
la source
À partir de la documentation jQuery
Dans un contexte de plugin: Si l'utilisateur ne définit pas les paramètres optionnels pour la fonction, alors une valeur par défaut sera utilisée à la place.
la source
Comment extend () fonctionne-t-il dans jQuery? [Résolu]
jQuery a une copie profonde et une copie légère. Le premier booléen le décide, vrai pour profond et faux pour lumière.
Par exemple:
jQuery.extend (false, {'a': {'a1': 1}}, {'a': {'a2': 2}})
le résultat sera: {'a': {'a2': 2}} car c'est une copie légère, comparez simplement le niveau 1.
jQuery.extend (vrai, {'a': {'a1': 1}}, {'a': {'a2': 2}})
le résultat sera: {'a': {'a1': 1, 'a2': 2}} Ceci est une copie profonde avec plusieurs niveaux d'objet (tout comme le niveau de tableau)
jQuery.extend (a, b, c) avec a, b, c est un objet ou un tableau. Le dépassement de flux sera b-> a, c -> a (b overrite a, c override a ...) cette fonction renverra a et une valeur de changement également.
Exemples avancés:
jQuery.extend ({'number_param': 1})
Au cas où vous ne passeriez qu'un seul paramètre. jQuery va s'étendre. console.log (jQuery ['number_param']) affichera 1.
jQuery.extend (1, {'number_param': '2'}); Cet exemple n'ajoute pas jQuery lui-même. Le premier paramètre doit être booléen. Dans ce cas, il retournera {'number_param': '2'} et jQuery ne sera pas mis à jour.
jQuery.extend (a, b, c, d, e, f); La fusion des commandes sera. b -> a, c -> a, d -> a, e -> a, f -> a (b remplacer a, c remplacer a ...). Et le retour de résultat sera un.
avec a = {'p': 1}. jQuery.extend (a, {'p': 2}, {'p': 3}, {'p': 4}, {'p': 5}) renverra a, et a = {'p': 6}. Le nombre de paramètres transmis à cette fonction est illimité.
la source
Le but est d'étendre un objet existant. Par exemple, si nous avons un objet modèle et que nous voulons l'étendre en ajoutant plus de propriétés ou en remplaçant les propriétés existantes, jquery extend peut être utile.
};
maintenant si nous voulons l'étendre,
$.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
cela nous donnera une sortie, étendant carObjectTemplate et ajoutantle premier paramètre booléen true / false est d'indiquer si nous avons besoin d'une copie profonde ou superficielle
la source
Il fait exactement cela
Plus sur jQuery.extend ()
la source