Eu vi isso em um plugin:
var options = $.extend(defaults, options);
Como funciona?
O que extend()
fazer?
jquery
jquery-plugins
Todd Terry
fonte
fonte
Respostas:
Parâmetros múltiplos
A documentação não é precisa para explicar como a extensão funciona, então fiz um pequeno teste:
(A
console.log
função deve funcionar no Firebug; substitua-a por alert () ou alguma outra função de saída, se desejar).Os resultados são:
Por isso, podemos ver que jQuery.extend ():
Isso é útil para combinar objetos de opções padrão e de usuário para obter um conjunto completo de opções:
Observe que "nulo" é um valor válido para sobrescrever, mas "indefinido" não é. Você pode ser capaz de fazer uso disso.
Resulta em:
Parâmetro Único
Se você passar apenas um objeto para
jQuery.extend()
, o jQuery assume que o própriojQuery
objeto é o "primeiro" parâmetro (ou seja: aquele a ser modificado), e seu objeto é o "segundo" (ou seja: aquele a ser adicionado ao primeiro) . Assim:Resulta em:
fonte
{zed: 'dark'}
vez de2
e você definirr.baz.zed = 'light'
, qual seria o valor deb.baz.zed
? ou seja, as propriedades são copiadas ou mescladas por referência?b.baz.zed
serialight
- ou seja, os valores são fundidos por referência. veja um violinoEle mescla o conteúdo de um objeto com outro . Se passarmos dois objetos, as propriedades do segundo objeto são adicionadas ao primeiro objeto / primeiro parâmetro
Agora object1 contém propriedades de object2
Se quisermos fundir dois objetos , precisamos passar o objeto vazio no primeiro parâmetro
Agora newObject contém as propriedades de object1 e object2 .
fonte
Da documentação jQuery
Em um contexto de plug-in: Se o usuário não definir os parâmetros opcionais para a função, um valor padrão será usado.
fonte
Como extend () funciona no jQuery? [Resolvido]
jQuery tem deep copy e light copy. O primeiro booleano decide isso, verdadeiro para profundo e falso para luz.
Por exemplo:
jQuery.extend (false, {'a': {'a1': 1}}, {'a': {'a2': 2}})
o resultado será: {'a': {'a2': 2}} porque esta é uma cópia leve, basta comparar o nível 1.
jQuery.extend (true, {'a': {'a1': 1}}, {'a': {'a2': 2}})
o resultado será: {'a': {'a1': 1, 'a2': 2}} Esta é uma cópia profunda com muitos níveis de objeto (assim como o nível de matriz)
jQuery.extend (a, b, c) com a, b, c é um objeto ou array. A sobrescrita de fluxo será b-> a, c -> a (sobrescrever b a, sobrescrever c a ...) esta função retornará ae também alterará o valor.
Exemplos avançados:
jQuery.extend ({'number_param': 1})
Caso você passe apenas um parâmetro. jQuery se estenderá. console.log (jQuery ['number_param']) produzirá 1.
jQuery.extend (1, {'number_param': '2'}); Este exemplo não é o próprio jQuery. O primeiro parâmetro deve ser booleano. Neste caso, ele retornará {'number_param': '2'} e jQuery não será atualizado.
jQuery.extend (a, b, c, d, e, f); A fusão do pedido será. b -> a, c -> a, d -> a, e -> a, f -> a (b anula a, c anula a ...). E o retorno do resultado será a.
com a = {'p': 1}. jQuery.extend (a, {'p': 2}, {'p': 3}, {'p': 4}, {'p': 5}) retornará a, e a = {'p': 6}. Os parâmetros numéricos passados para esta função são ilimitados.
fonte
O objetivo é estender um objeto existente. Por exemplo, se temos um objeto de modelo e queremos estendê-lo adicionando mais propriedades ou sobrescrevendo propriedades existentes, jquery extend pode ser útil.
};
agora, se quisermos estendê-lo,
$.extend(true, {"color":"red"}, carObjectTemplate, {"model": 'amaze'});
ele nos dará saída, estendendo carObjectTemplate e adicionandoo primeiro parâmetro booleano true / false é para indicar se precisamos de uma cópia profunda ou superficial
fonte
Faz exatamente isso
Mais em jQuery.extend ()
fonte