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.
46 lines
1.4 KiB
46 lines
1.4 KiB
'use strict'; |
|
|
|
// modified from https://github.com/es-shims/es6-shim |
|
var objectKeys = require('object-keys'); |
|
var hasSymbols = require('has-symbols/shams')(); |
|
var callBound = require('call-bind/callBound'); |
|
var toObject = Object; |
|
var $push = callBound('Array.prototype.push'); |
|
var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable'); |
|
var originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null; |
|
|
|
// eslint-disable-next-line no-unused-vars |
|
module.exports = function assign(target, source1) { |
|
if (target == null) { throw new TypeError('target must be an object'); } |
|
var to = toObject(target); // step 1 |
|
if (arguments.length === 1) { |
|
return to; // step 2 |
|
} |
|
for (var s = 1; s < arguments.length; ++s) { |
|
var from = toObject(arguments[s]); // step 3.a.i |
|
|
|
// step 3.a.ii: |
|
var keys = objectKeys(from); |
|
var getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols); |
|
if (getSymbols) { |
|
var syms = getSymbols(from); |
|
for (var j = 0; j < syms.length; ++j) { |
|
var key = syms[j]; |
|
if ($propIsEnumerable(from, key)) { |
|
$push(keys, key); |
|
} |
|
} |
|
} |
|
|
|
// step 3.a.iii: |
|
for (var i = 0; i < keys.length; ++i) { |
|
var nextKey = keys[i]; |
|
if ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2 |
|
var propValue = from[nextKey]; // step 3.a.iii.2.a |
|
to[nextKey] = propValue; // step 3.a.iii.2.b |
|
} |
|
} |
|
} |
|
|
|
return to; // step 4 |
|
};
|
|
|