深拷贝

function checkType(obj) {

    return Object.prototype.toString.call(obj).slice(8,-1);

}

function deepClone(obj,hash = new WeakMap()) {

    if(checkType(obj) === 'Date') {

        return new Date(obj)

    }

    if(checkType(obj) === 'RegExp') {

        // regExp.source 正则对象的源模式文本

        // regEpx.flags 正则表达式对象的标志字符串

        // regEpx.lastIndex 下次匹配开始的字符串索引位置

        let temp = new RegExp(obj.source,obj.flags);

        temp.lastIndex = obj.lastIndex;

        return temp;

    }

    if(obj === null || typeof obj !=='object') {

        return obj

    }

    if(hash.has(obj)){

        return hash.get(obj);

    }

    let newObj = new obj.constructor

    hash.set(obj, newObj);

    Reflect.ownKeys(obj).forEach(key => {

        if(typeof obj[key] === 'object' && obj[key] !== nll) {

            newObj[key] = deepClone(obj[key], hash);

        } else {

            newObj[key] = obj[key];

            Object.defineProperty(newObj, key, Object.getOwnPropertyDescriptor(obj, key));

        }

    })

    return newObj;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容