fundo
Tenho uma função que usa um config
objeto como argumento. Dentro da função, também tenho default
objeto. Cada um desses objetos contém propriedades que funcionam essencialmente como configurações para o resto do código dentro da função. A fim de evitar ter que especificar todas as configurações dentro do config
objeto, eu uso o extend
método jQuery para preencher um novo objeto, settings
com quaisquer valores padrão do default
objeto, se eles não foram especificados no config
objeto:
var config = {key1: value1};
var default = {key1: default1, key2: default2, key 3: default 3};
var settings = $.extend(default, config);
//resulting properties of settings:
settings = {key1: value1, key2: default2, key 3: default 3};
Problema
Isso funciona muito bem, mas eu gostaria de reproduzir essa funcionalidade sem a necessidade do jQuery. Existe um meio igualmente elegante (ou próximo de) para fazer isso com o velho javascript?
Editar: Justificativa Não Duplicada
Esta pergunta não é uma duplicata da pergunta " Como posso mesclar propriedades de dois objetos JavaScript dinamicamente? " Considerando que essa questão deseja simplesmente criar um objeto que contém todas as chaves e valores de dois objetos separados - eu quero especificamente abordar como fazer isso no caso de ambos os objetos compartilharem algumas, mas não todas as chaves e qual objeto terá precedência ( o padrão) para o objeto resultante no caso de haver chaves duplicadas. E ainda mais especificamente, eu queria abordar o uso do método jQuery para conseguir isso e encontrar uma maneira alternativa de fazer isso sem jQuery. Embora muitas das respostas a ambas as perguntas se sobreponham, isso não significa que as próprias perguntas sejam as mesmas.
jQuery.isPlainObject
ejQuery.isFunction