Skip to content

Instantly share code, notes, and snippets.

@cferdinandi
Last active August 17, 2024 07:57
Show Gist options
  • Save cferdinandi/4f8a0e17921c5b46e6c4 to your computer and use it in GitHub Desktop.
Save cferdinandi/4f8a0e17921c5b46e6c4 to your computer and use it in GitHub Desktop.
A native JS extend() function.

Example

var defaults = {
    number: 1,
    bool: true,
    magic: 'real',
    animal: 'whale',
    croutons: 'delicious'
};

var options = {
    number: 2,
    magic: 'real',
    animal: 'porpoise',
    bool: false,
    random: 42
};

var settings = extend(defaults, options);

console.log(settings);
// Returns: Object{animal: "porpoise", bool: false, croutons: "delicious", magic: "real", number: 2, random: 42}
/**
* Merge defaults with user options
* @private
* @param {Object} defaults Default settings
* @param {Object} options User options
* @returns {Object} Merged values of defaults and options
*/
var extend = function ( defaults, options ) {
var extended = {};
var prop;
for (prop in defaults) {
if (Object.prototype.hasOwnProperty.call(defaults, prop)) {
extended[prop] = defaults[prop];
}
}
for (prop in options) {
if (Object.prototype.hasOwnProperty.call(options, prop)) {
extended[prop] = options[prop];
}
}
return extended;
};
@jimmynotjim
Copy link

This is awesome, thanks so much for sharing it.

@diniremix
Copy link

very useful, thanks

@hyfydistro
Copy link

This is similar to Object.assign(). Is there a reason to use one over the other?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment