Object.assign()
方法用于将所有可枚举的属性的值从link一个或多个源对象复制到目标对象。它将返回目标对象
详细描述可以参见:Object.assign() - JavaScript | MDN
源码如下:
if (typeof Object.assign != 'function') {
(function () {
Object.assign = function (target) {
'use strict';
if (target === undefined || target === null) {
throw new TypeError('Cannot convert undefined or null to object');
}
var output = Object(target);
for (var index = 1; index < arguments.length; index++) {
var source = arguments[index];
if (source !== undefined && source !== null) {
for (var nextKey in source) {
if (source.hasOwnProperty(nextKey)) {
output[nextKey] = source[nextKey];
}
}
}
}
return output;
};
})();
}
对于不支持该属性的浏览器:
Object.assign = function () {
let list = arguments; let f = list[0]; let last = list[list.length - 1];
let count = list.length;
if (last === true) count--
for (var i = 1; i < count; i++) {
let p = list[i];
if (last === true) p = JSON.parse(JSON.stringify(p));
if (p instanceof Array) {
for (let i = 0; i < p.length; i++) f[i] = p[i];
}
else {
for (let a in p) f[a] = p[a];
}
}
return f;
}
注:最后一参设为true,可以实现简单得深拷贝。