Vi esto en un complemento:
var options = $.extend(defaults, options);
¿Como funciona?
¿Qué extend()
hacer?
jquery
jquery-plugins
Todd Terry
fuente
fuente
Respuestas:
Múltiples parámetros
La documentación no es precisa para explicar cómo funciona extender, así que realicé una pequeña prueba:
(Los
console.log
función está diseñada para funcionar en Firebug; reemplácela con alert () o alguna otra función de salida si lo desea).Los resultados son:
Por esto podemos ver que jQuery.extend ():
Esto es útil para combinar el usuario y los objetos de opción predeterminados juntos para obtener un conjunto completo de opciones:
Tenga en cuenta que "nulo" es un valor válido para sobrescribir, pero "no definido" no lo es. Es posible que pueda hacer uso de esto.
Resultados en:
Parámetro único
Si pasa solo un objeto a
jQuery.extend()
, entonces jQuery asume que eljQuery
objeto en sí es el "primer" parámetro (es decir, el que se va a modificar), y su objeto es el "segundo" (es decir, el que se agrega al primero) . Entonces:Resultados en:
fuente
{zed: 'dark'}
lugar de2
y tú establecesr.baz.zed = 'light'
, ¿cuál sería el valor deb.baz.zed
? es decir, ¿las propiedades se copian o fusionan por referencia?b.baz.zed
seríalight
- es decir, los valores se fusionan por referencia. ver un violínSe funde el contenido de un objeto a otro . Si pasamos dos objetos, las propiedades del segundo objeto se agregan al primer objeto / primer parámetro
Ahora object1 contiene propiedades de object2
Si queremos fusionar dos objetos , necesitamos pasar un objeto vacío en el primer parámetro
Ahora newObject contiene ambas propiedades de object1 y object2 .
fuente
De la documentación de jQuery
En el contexto de un complemento: si el usuario no establece los parámetros opcionales para la función, se utilizará un valor predeterminado en su lugar.
fuente
¿Cómo funciona extend () en jQuery? [Resuelto]
jQuery tiene copia profunda y copia ligera. El primer booleano lo decide, verdadero para profundo y falso para ligero.
Por ejemplo:
jQuery.extend (false, {'a': {'a1': 1}}, {'a': {'a2': 2}})
el resultado será: {'a': {'a2': 2}} porque esta es una copia ligera, simplemente compare el nivel 1.
jQuery.extend (true, {'a': {'a1': 1}}, {'a': {'a2': 2}})
el resultado será: {'a': {'a1': 1, 'a2': 2}} Esta es una copia profunda con muchos niveles de objeto (como el nivel de la matriz)
jQuery.extend (a, b, c) con a, b, c es objeto o matriz. El flujo de sobreescritura será b-> a, c -> a (b sobreescribe a, c sobreescribe a ...) esta función devolverá ay a también cambiará el valor.
Ejemplos avanzados:
jQuery.extend ({'number_param': 1})
En caso de que solo pase un parámetro. jQuery se extenderá. console.log (jQuery ['number_param']) generará 1.
jQuery.extend (1, {'number_param': '2'}); Este ejemplo no es un anexo de jQuery. El primer parámetro debe ser booleano. En este caso, devolverá {'number_param': '2'} y jQuery no se actualizará.
jQuery.extend (a, b, c, d, e, f); El orden de fusión será. b -> a, c -> a, d -> a, e -> a, f -> a (b anula a, c anula a ...). Y la devolución del resultado será un.
con a = {'p': 1}. jQuery.extend (a, {'p': 2}, {'p': 3}, {'p': 4}, {'p': 5}) devolverá a, y a = {'p': 6}. El número de parámetros que se pasan a esta función es ilimitado.
fuente
El propósito es ampliar un objeto existente. Por ejemplo, si tenemos un objeto de plantilla y queremos extenderlo agregando más propiedades o anulando propiedades existentes, jquery extend puede ser útil.
};
ahora si queremos extenderlo,
$.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
nos dará salida, extendiendo carObjectTemplate y agregandoEl primer parámetro booleano verdadero / falso es para indicar si necesitamos una copia profunda o superficial
fuente
Hace exactamente esto
Más en jQuery.extend ()
fuente