J'ai vu cela dans un plugin:
var options = $.extend(defaults, options);
Comment ça marche?
Que fait extend()
?
La documentation n'étant pas précise pour expliquer le fonctionnement de extend, j'ai donc effectué un petit test:
var a = {foo: 1, bar: 1};
var b = {foo: 2, baz: 2};
var c = {foo: 3};
var r = jQuery.extend(a,b,c);
console.log("A: Foo=" + a.foo + " Bar=" + a.bar + " Baz=" + a.baz);
console.log("B: Foo=" + b.foo + " Bar=" + b.bar + " Baz=" + b.baz);
console.log("C: Foo=" + c.foo + " Bar=" + c.bar + " Baz=" + c.baz);
console.log("R: Foo=" + r.foo + " Bar=" + r.bar + " Baz=" + r.baz);
console.log("A === R?: " + (a === r));
(La fonction console.log
Est destinée à fonctionner dans Firebug; remplacez-la par alert () ou une autre fonction de sortie si vous le souhaitez).
Les résultats sont:
A: Foo=3 Bar=1 Baz=2
B: Foo=2 Bar=undefined Baz=2
C: Foo=3 Bar=undefined Baz=undefined
R: Foo=3 Bar=1 Baz=2
A === R?: true
Par ceci nous pouvons voir que jQuery.extend ():
Ceci est utile pour combiner des objets option et utilisateur par défaut afin d'obtenir un ensemble complet d'options:
function foo(userOptions) {
var defaultOptions = {
foo: 2,
bar: 2
};
var someOtherDefaultOptions = {
baz: 3
};
var allOptions = jQuery.extend(
defaultOptions,
someOtherDefaultOptions,
userOptions
);
doSomething(allOptions);
}
foo({foo:1, baz:1});
Notez que "null" est une valeur valide pour le remplacement, mais "non défini" ne l’est pas. Vous pourrez peut-être vous en servir.
var a = {foo: "a", bar: "a"};
var b = {foo: null, bar: undefined};
jQuery.extend(a,b);
console.log("A: Foo=" + a.foo + " Bar=" + a.bar);
Résulte en:
A: Foo=null Bar=a
Si vous ne transmettez qu’un seul objet à jQuery.extend()
, jQuery suppose que l’objet jQuery
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:
console.log( "Before: " + jQuery.foo );
jQuery.extend({foo:1});
console.log( "After: " + jQuery.foo );
Résulte en:
Before: undefined
After: 1
Il fusionne le contenu d'un objet avec un autre. Si nous passons deux objets, les propriétés du deuxième objet sont ajoutées au premier objet/premier paramètre
Ex: $.extend(object1, object2);
Maintenant objet1 contient les propriétés de objet2
Si nous voulons fusionner deux objets, alors nous devons passer un objet vide dans le premier paramètre
Ex: var newObject = $.extend({}, object1, object2);
Now newObject contient les deux propriétés de object1 et object2.
À partir de la documentation jQuery
Fusionnez le contenu de deux objets ou plus dans le premier objet.
Dans un contexte de plugin: Si l'utilisateur ne définit pas les paramètres facultatifs de la fonction, une valeur par défaut sera utilisée.
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 il s'agit d'une copie claire, il suffit de comparer le niveau 1.
jQuery.extend (true, {'a': {'a1': 1}}, {'a': {'a2': 2}})
le résultat sera: {'a': {'a1': 1, 'a2': 2}} Ceci est une copie complète avec plusieurs niveaux d'objet (comme le niveau d'un tableau)
jQuery.extend (a, b, c) avec a, b, c est un objet ou un tableau. Le flux de dérogation sera b-> a, c -> a (b dérogation a, c priorité a ...) cette fonction retournera a et changera également de valeur.
Exemples avancés:
jQuery.extend ({'number_param': 1})
Dans le cas où vous passez juste un paramètre. jQuery va s'étendre. console.log (jQuery ['number_param']) affichera 1.
jQuery.extend (1, {'number_param': '2'}); Cet exemple n'est pas append 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 commande sera fusionnée. b -> a, c -> a, d -> a, e -> a, f -> a (b annule a, c annule a ...). Et le 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é.
Le but est d'étendre un objet existant. Par exemple Si nous avons un objet template et que nous souhaitons l'étendre en ajoutant d'autres propriétés ou en remplaçant les propriétés existantes, jquery extend peut être utile.
var carObjectTemplate = {
"make": "honda",
"model":"city",
"mileage":"20",
"variant":"petrol"
};
maintenant, si nous voulons l’étendre, $.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
, il nous donnera un résultat, étendre carObjectTemplate et ajouter
{"color":"red"} property and overriding "model" property from "city" to "amaze"
le premier paramètre booléen true/false indique si une copie profonde ou superficielle est nécessaire.
Il existe un exemple parfait dans la documentation jQuery: méthode. Extend ()
Il fait exactement cela
Description : Fusionnez le contenu de deux objets ou plus dans le premier objet.
Plus à jQuery.extend ()