You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.2 KiB
JavaScript
61 lines
1.2 KiB
JavaScript
6 years ago
|
'use strict';
|
||
|
|
||
|
var isExtendable = require('is-extendable');
|
||
|
var assignSymbols = require('assign-symbols');
|
||
|
|
||
|
module.exports = Object.assign || function(obj/*, objects*/) {
|
||
|
if (obj === null || typeof obj === 'undefined') {
|
||
|
throw new TypeError('Cannot convert undefined or null to object');
|
||
|
}
|
||
|
if (!isObject(obj)) {
|
||
|
obj = {};
|
||
|
}
|
||
|
for (var i = 1; i < arguments.length; i++) {
|
||
|
var val = arguments[i];
|
||
|
if (isString(val)) {
|
||
|
val = toObject(val);
|
||
|
}
|
||
|
if (isObject(val)) {
|
||
|
assign(obj, val);
|
||
|
assignSymbols(obj, val);
|
||
|
}
|
||
|
}
|
||
|
return obj;
|
||
|
};
|
||
|
|
||
|
function assign(a, b) {
|
||
|
for (var key in b) {
|
||
|
if (hasOwn(b, key)) {
|
||
|
a[key] = b[key];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function isString(val) {
|
||
|
return (val && typeof val === 'string');
|
||
|
}
|
||
|
|
||
|
function toObject(str) {
|
||
|
var obj = {};
|
||
|
for (var i in str) {
|
||
|
obj[i] = str[i];
|
||
|
}
|
||
|
return obj;
|
||
|
}
|
||
|
|
||
|
function isObject(val) {
|
||
|
return (val && typeof val === 'object') || isExtendable(val);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the given `key` is an own property of `obj`.
|
||
|
*/
|
||
|
|
||
|
function hasOwn(obj, key) {
|
||
|
return Object.prototype.hasOwnProperty.call(obj, key);
|
||
|
}
|
||
|
|
||
|
function isEnum(obj, key) {
|
||
|
return Object.prototype.propertyIsEnumerable.call(obj, key);
|
||
|
}
|