Ho visto questo in un plugin:
var options = $.extend(defaults, options);
Come funziona?
Cosa fa extend()
?
Ho visto questo in un plugin:
var options = $.extend(defaults, options);
Come funziona?
Cosa fa extend()
?
Risposte:
La documentazione non è precisa nello spiegare come funziona l'estensione, quindi ho eseguito un piccolo 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 console.log
funzione è pensata per funzionare in Firebug; sostituiscila con alert () o qualche altra funzione di output, se lo desideri).
I risultati sono:
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
Da questo possiamo vedere che jQuery.extend ():
Questo è utile per combinare insieme oggetti opzione utente e predefinito per ottenere un set completo di opzioni:
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});
Nota che "null" è un valore valido per la sovrascrittura, ma "undefined" non lo è. Potresti essere in grado di farne uso.
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);
Risultati in:
A: Foo=null Bar=a
Se passi un solo oggetto a jQuery.extend()
, allora jQuery presume che l' jQuery
oggetto stesso sia il "primo" parametro (cioè: quello da modificare), e il tuo oggetto è il "secondo" (cioè: quello da aggiungere al primo) . Così:
console.log( "Before: " + jQuery.foo );
jQuery.extend({foo:1});
console.log( "After: " + jQuery.foo );
Risultati in:
Before: undefined
After: 1
{zed: 'dark'}
piuttosto che 2
e tu imposti r.baz.zed = 'light'
, quale sarebbe il valore di b.baz.zed
? cioè le proprietà sono copiate o unite per riferimento?
b.baz.zed
sarebbe light
- cioè i valori sono uniti per riferimento. vedere un violino
Si fonde il contenuto di un oggetto all'altro . Se passiamo due oggetti, le proprietà del secondo oggetto vengono aggiunte al primo oggetto / primo parametro
Ex: $.extend(object1, object2);
Ora object1 contiene le proprietà di object2
Se vogliamo unire due oggetti , dobbiamo passare un oggetto vuoto nel primo parametro
Ex: var newObject = $.extend({}, object1, object2);
Ora newObject contiene entrambe le proprietà di object1 e object2 .
Dalla documentazione di jQuery
Unisci il contenuto di due o più oggetti insieme nel primo oggetto.
In un contesto di plugin: se l'utente non imposta i parametri opzionali per la funzione, verrà invece utilizzato un valore predefinito.
Come funziona extent () in jQuery? [Risolto]
jQuery ha una copia completa e una copia leggera. Il primo booleano lo decide, vero per profondo e falso per luce.
Per esempio:
jQuery.extend (false, {'a': {'a1': 1}}, {'a': {'a2': 2}})
il risultato sarà: {'a': {'a2': 2}} perché questa è una copia leggera, confronta semplicemente il livello 1.
jQuery.extend (true, {'a': {'a1': 1}}, {'a': {'a2': 2}})
il risultato sarà: {'a': {'a1': 1, 'a2': 2}} Questa è una copia completa con molti livelli di oggetto (proprio come il livello di array)
jQuery.extend (a, b, c) con a, b, c è un oggetto o un array. La sovrascrittura del flusso sarà b-> a, c -> a (b sovrascrivere a, c sovrascrivere a ...) questa funzione restituirà a e a cambierà anche il valore.
Esempi avanzati:
jQuery.extend ({'number_param': 1})
Nel caso in cui passi solo un parametro. jQuery si estenderà. console.log (jQuery ['number_param']) restituirà 1.
jQuery.extend (1, {'number_param': '2'}); Questo esempio non è aggiungere jQuery stesso. Il primo parametro deve essere booleano. In questo caso restituirà {'number_param': '2'} e jQuery non verrà aggiornato.
jQuery.extend (a, b, c, d, e, f); L'unione dell'ordine sarà. b -> a, c -> a, d -> a, e -> a, f -> a (b sovrascrive a, c sovrascrive a ...). E il ritorno del risultato sarà a.
con a = {'p': 1}. jQuery.extend (a, {'p': 2}, {'p': 3}, {'p': 4}, {'p': 5}) restituirà a e a = {'p': 6}. Il numero di parametri passati a questa funzione è illimitato.
Lo scopo è estendere un oggetto esistente. Ad esempio, se abbiamo un oggetto modello e vogliamo estenderlo aggiungendo più proprietà o sovrascrivendo le proprietà esistenti, jquery extent può essere utile.
var carObjectTemplate = {
"make": "honda",
"model":"city",
"mileage":"20",
"variant":"petrol"
};
ora se vogliamo estenderlo,
$.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
ci darà ouput, estendendo carObjectTemplate e aggiungendo
{"color":"red"} property and overriding "model" property from "city" to "amaze"
Il primo parametro booleano vero / falso serve a indicare se abbiamo bisogno di una copia profonda o superficiale
Fa esattamente questo
Descrizione : unisce il contenuto di due o più oggetti nel primo oggetto.
Altro su jQuery.extend ()