You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.2 KiB
60 lines
1.2 KiB
/*! |
|
* merge-descriptors |
|
* Copyright(c) 2014 Jonathan Ong |
|
* Copyright(c) 2015 Douglas Christopher Wilson |
|
* MIT Licensed |
|
*/ |
|
|
|
'use strict' |
|
|
|
/** |
|
* Module exports. |
|
* @public |
|
*/ |
|
|
|
module.exports = merge |
|
|
|
/** |
|
* Module variables. |
|
* @private |
|
*/ |
|
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty |
|
|
|
/** |
|
* Merge the property descriptors of `src` into `dest` |
|
* |
|
* @param {object} dest Object to add descriptors to |
|
* @param {object} src Object to clone descriptors from |
|
* @param {boolean} [redefine=true] Redefine `dest` properties with `src` properties |
|
* @returns {object} Reference to dest |
|
* @public |
|
*/ |
|
|
|
function merge(dest, src, redefine) { |
|
if (!dest) { |
|
throw new TypeError('argument dest is required') |
|
} |
|
|
|
if (!src) { |
|
throw new TypeError('argument src is required') |
|
} |
|
|
|
if (redefine === undefined) { |
|
// Default to true |
|
redefine = true |
|
} |
|
|
|
Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) { |
|
if (!redefine && hasOwnProperty.call(dest, name)) { |
|
// Skip desriptor |
|
return |
|
} |
|
|
|
// Copy descriptor |
|
var descriptor = Object.getOwnPropertyDescriptor(src, name) |
|
Object.defineProperty(dest, name, descriptor) |
|
}) |
|
|
|
return dest |
|
}
|
|
|