Ich habe das in einem Plugin gesehen:
var options = $.extend(defaults, options);
Wie funktioniert es?
Was macht extend()
das
jquery
jquery-plugins
Todd Terry
quelle
quelle
Antworten:
Mehrere Parameter
Die Dokumentation erklärt nicht genau, wie Extend funktioniert, daher habe ich einen kleinen Test durchgeführt:
(Die
console.log
Funktion soll in Firebug funktionieren. Ersetzen Sie sie durch alert () oder eine andere Ausgabefunktion, wenn Sie möchten.)Die Ergebnisse sind:
Daran können wir erkennen, dass jQuery.extend ():
Dies ist nützlich, um Benutzer- und Standardoptionsobjekte miteinander zu kombinieren, um einen vollständigen Satz von Optionen zu erhalten:
Beachten Sie, dass "null" ein gültiger Wert für das Überschreiben ist, "undefiniert" jedoch nicht. Möglicherweise können Sie dies nutzen.
Ergebnisse in:
Einzelner Parameter
Wenn Sie nur ein Objekt an übergeben
jQuery.extend()
, geht jQuery davon aus, dass dasjQuery
Objekt selbst der "erste" Parameter ist (dh das zu ändernde) und Ihr Objekt das "zweite" (dh dasjenige, das dem ersten hinzugefügt werden soll). . So:Ergebnisse in:
quelle
{zed: 'dark'}
eher ein Objekt wäre als zu sagen2
und Sie setzenr.baz.zed = 'light'
, was wäre der Wert vonb.baz.zed
? dh werden die Eigenschaften als Referenz kopiert oder zusammengeführt?b.baz.zed
wärelight
- dh werte werden durch referenz zusammengeführt. siehe eine GeigeEs führt den Inhalt eines Objekts mit einem anderen zusammen . Wenn wir zwei Objekte übergeben, werden dem ersten Objekt / ersten Parameter zweite Objekteigenschaften hinzugefügt
Jetzt enthält Objekt1 Eigenschaften von Objekt2
Wenn wir zwei Objekte zusammenführen möchten, müssen wir im ersten Parameter ein leeres Objekt übergeben
Jetzt enthält newObject beide Eigenschaften von Objekt1 und Objekt2 .
quelle
Aus der jQuery-Dokumentation
In einem Plugin-Kontext: Wenn der Benutzer die optionalen Parameter für die Funktion nicht festlegt, wird stattdessen ein Standardwert verwendet.
quelle
Wie funktioniert extens () in jQuery? [Aufgelöst]
jQuery hat Deep Copy und Light Copy. Der erste Boolesche entscheidet, wahr für tief und falsch für Licht.
Beispielsweise:
jQuery.extend (false, {'a': {'a1': 1}}, {'a': {'a2': 2}})
Das Ergebnis ist: {'a': {'a2': 2}}, da dies eine leichte Kopie ist, vergleiche einfach Level 1.
jQuery.extend (true, {'a': {'a1': 1}}, {'a': {'a2': 2}})
Das Ergebnis ist: {'a': {'a1': 1, 'a2': 2}} Dies ist eine tiefe Kopie mit vielen Objektebenen (genau wie die Ebene des Arrays).
jQuery.extend (a, b, c) mit a, b, c ist ein Objekt oder Array. Die Flussüberschreibung ist b-> a, c -> a (b Überschreibung a, c Überschreibung a ...). Diese Funktion gibt a zurück und ändert auch den Wert.
Erweiterte Beispiele:
jQuery.extend ({'number_param': 1})
Falls Sie nur einen Parameter übergeben. jQuery wird sich selbst erweitern. console.log (jQuery ['number_param']) gibt 1 aus.
jQuery.extend (1, {'number_param': '2'}); In diesem Beispiel wird jQuery selbst nicht angehängt. Der erste Parameter muss boolesch sein. In diesem Fall wird {'number_param': '2'} zurückgegeben und jQuery wird nicht aktualisiert.
jQuery.extend (a, b, c, d, e, f); Die Zusammenführung der Bestellung erfolgt. b -> a, c -> a, d -> a, e -> a, f -> a (b überschreiben a, c überschreiben a ...). Und die Ergebnisrendite wird a sein.
mit a = {'p': 1}. jQuery.extend (a, {'p': 2}, {'p': 3}, {'p': 4}, {'p': 5}) gibt a zurück und a = {'p': 6}. Die an diese Funktion übergebenen Zahlenparameter sind unbegrenzt.
quelle
Der Zweck besteht darin, ein vorhandenes Objekt zu erweitern. Wenn wir beispielsweise ein Vorlagenobjekt haben und dieses erweitern möchten, indem wir weitere Eigenschaften hinzufügen oder vorhandene Eigenschaften überschreiben, kann jquery extension nützlich sein.
};
Wenn wir es jetzt erweitern möchten
$.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
, erhalten wir die Ausgabe, erweitern carObjectTemplate und fügen hinzuDer erste boolesche Parameter true / false gibt an, ob eine tiefe oder flache Kopie benötigt wird
quelle
Es macht genau das
Mehr unter jQuery.extend ()
quelle