Contexte
J'ai une fonction qui prend un config
en tant qu'argument. Dans la fonction, j'ai aussi default
objet. Chacun de ces objets contient des propriétés qui servent essentiellement de paramètres pour le reste du code de la fonction. Afin d'éviter d'avoir à spécifier tous les paramètres dans l'objet config
j'utilise l'objet jQuery extend
pour remplir un nouvel objet, settings
avec toutes les valeurs par défaut de la default
s'ils n'ont pas été spécifiés dans l'objet config
objet :
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};
Problème
Cela fonctionne très bien, mais j'aimerais reproduire cette fonctionnalité sans avoir recours à jQuery. Existe-t-il un moyen aussi élégant (ou presque) de le faire avec le bon vieux javascript ?
Editer : Justification non dupliquée
Cette question n'est pas un doublon de la question " Comment fusionner dynamiquement les propriétés de deux objets JavaScript ? Question ". Alors que cette question vise simplement à créer un objet qui contient toutes les clés et les valeurs de deux objets distincts, je veux spécifiquement aborder la façon de procéder dans le cas où les deux objets partagent certaines clés mais pas toutes, et quel objet aura la priorité (par défaut) pour l'objet résultant dans le cas où il y a des clés en double. Et plus spécifiquement encore, je voulais aborder l'utilisation de la méthode de jQuery pour y parvenir et trouver un autre moyen de le faire sans jQuery. Si de nombreuses réponses aux deux questions se recoupent, cela ne signifie pas que les questions elles-mêmes sont les mêmes.
9 votes
Il suffit de voler la façon dont jQuery le fait james.padolsey.com/jquery/#v=1.6.2&fn=jQuery.extend :-P
0 votes
Bonne idée @RocketHazmat, notez que si vous copiez cette fonction, elle a quelques autres dépendances jQuery comme
jQuery.isPlainObject
yjQuery.isFunction
1 votes
@RocketHazmat quelqu'un l'a déjà fait : gomakethings.com/vanilla-javascript-version-of-jquery-extend/