1 var baseCopy = require('./baseCopy'),
2 getSymbols = require('./getSymbols'),
3 isNative = require('../lang/isNative'),
4 keys = require('../object/keys');
6 /** Native method references. */
7 var preventExtensions = isNative(Object.preventExtensions = Object.preventExtensions) && preventExtensions;
9 /** Used as `baseAssign`. */
10 var nativeAssign = (function() {
11 // Avoid `Object.assign` in Firefox 34-37 which have an early implementation
12 // with a now defunct try/catch behavior. See https://bugzilla.mozilla.org/show_bug.cgi?id=1103344
15 // Use `Object.preventExtensions` on a plain object instead of simply using
16 // `Object('x')` because Chrome and IE fail to throw an error when attempting
17 // to assign values to readonly indexes of strings in strict mode.
18 var object = { '1': 0 },
19 func = preventExtensions && isNative(func = Object.assign) && func;
21 try { func(preventExtensions(object), 'xo'); } catch(e) {}
22 return !object[1] && func;
26 * The base implementation of `_.assign` without support for argument juggling,
27 * multiple sources, and `customizer` functions.
30 * @param {Object} object The destination object.
31 * @param {Object} source The source object.
32 * @returns {Object} Returns `object`.
34 var baseAssign = nativeAssign || function(object, source) {
37 : baseCopy(source, getSymbols(source), baseCopy(source, keys(source), object));
40 module.exports = baseAssign;