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.
|
|
/*! * 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 }
|