欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Object.assign()深拷贝的用法、以及在IE浏览器不兼容的解决方案

程序员文章站 2022-03-20 22:05:01
...

1、Object.assign()的用法

ES5提供的Object.assign()原型方法,主要是用来解决拷贝出来的新对象和原来的对象不相互影响的问题。

主要用法有:

一、复制一个对象

let obj1 = { a: 0 , b: { c: 0}}; 
let obj2 = Object.assign({}, obj1); 
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} 

二、合并多个对象

const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };

const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }

更多用法可以查看 ——》MDN文档

2、IE浏览器不兼容Object.assign()

Object.assign()深拷贝的用法、以及在IE浏览器不兼容的解决方案

解决办法:重写Object.assign()的原型方法

if (typeof Object.assign != 'function') {
    Object.assign = function(target) {
        'use strict';
        if (target == null) {
            throw new TypeError('Cannot convert undefined or null to object');
        }

        target = Object(target);
        for (var index = 1; index < arguments.length; index++) {
            var source = arguments[index];
            if (source != null) {
                for (var key in source) {
                    if (Object.prototype.hasOwnProperty.call(source, key)) {
                        target[key] = source[key];
                    }
                }
            }
        }
        return target;
    };
}