• 我转过几个弯 绕过那个小雨楼
  • 拿着蒲扇摆着衣衫渡着紧箍咒
  • 不问天涯不停留 喝过几壶酒
  • 不过年少白头道义放胸口
  • 倘若明天之后 遥看前尘剑封侯
  • 似那天上神仙无所求
  • 朝朝暮暮君如梦醒十分不为何理由
  • 是真是假是惶恐是无休
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 又过了几个弯 算尽天量道莫慌
  • 踏这田园闻这芳草香
  • 跌跌撞撞仗剑天涯折煞不枉无笔良
  • 是梦是幻是温柔是家乡
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 路过这风雨花满楼 片刻都不停留
  • 我本这书生进京赶考留下许多愁
  • 你问有没有时候 我叹这天道默悠悠
  • 能否与我一醉方休
  • 谁能与我一醉方休

js深度克隆

136 0

深度克隆主要用于引用类型,因为大部分的引用类型如果某一个实例进行了修改,那么其他同一个引用的实例对象也会发生改变。

经过我小段时间的研究,以我目前的了解的来说,方法是没办法完全克隆的,你最多拿到独立属性,原型是共享的,这个没办法克隆,所以有点无解的样子,感觉这个深度克隆也只是表面意义上的克隆。

因为不是很懂啊,所以暂时先丢出写的方法吧,等待以后有机会更深入了解再详细说明,主要是我百度到的都是es6标准的一个方法,有些属性我并不了解,不知道他们的实际意义是什么。所以,很无奈啊!

function say() {
    console.log('hi');
}
function person(name) {
    this.name = name;
}
person.prototype.run = function() {
    console.log(this.name);
}
var Messi = new person('Messi');

var box = {
    a : new Date(),
    b : new RegExp('le','ig'),
    c : [1,2,3],
    d : say,
    e : Messi,
    f : 'name'
}
var da = 'name';

var pox = copy(box);

function copy(data){
    var type = Object.prototype.toString.call(data).slice(8,-1);
    if(type == 'Object') {
        if(typeof data.prototype == 'undefined') {
            var elem = {};
            for(var i in data) {
                elem[i] = copys(data[i]);
            }
            return elem;
        }else {
            function F() {};
            for(var i in data) {
                elem[i] = copys(data[i]);
            }
            F.prototype = new data();
            return new F();
        }
    }else {
        return copys(data);
    }
}

function copys(data) {
    var type = Object.prototype.toString.call(data).slice(8,-1);
    var al  = null;
    switch(type) {
        case 'Date' :
            al = new Date(data.getTime())
            return al;
        case 'RegExp' : 
            al = copyRegExp(data);
            return al;
        case 'Array' : 
            al = copyArray(data);
            return al;
        case 'Function' : 
            al = data;
            return al;
        case 'Object' : 
            al = copy(data);
            return al;
        default : 
            al = data;
            return al;
    }
    
    
    function copyRegExp(reg) {
        var mod = '';
        if(reg.global) mod += 'g';
        if(reg.ignoreCase) mod += 'i';
        if(reg.multiline) mod += 'm';
        return new RegExp(reg.source,mod);
    }
    function copyArray(array) {
        var arr = [];
        for(var i in array) {
            arr[i] = array[i];
        }
        return arr;
    }
}
0
  • 本文分类:JavaScript
  • 本文标签:js深度克隆
  • 流行热度:已超过 136 人围观了本文
  • 最后更新:2019年05月20日 - 18时16分29秒
  • 发布日期:2019年05月20日 - 18时16分29秒
  • 版权申明:本文系作者@木灵鱼儿原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。
微信收款码
微信收款码