美文网首页
js 实现 clone()

js 实现 clone()

作者: 江火渔枫 | 来源:发表于2016-08-04 15:25 被阅读81次

    1.基本数据类型 -- 指向即clone

    var num = 1000;
    var cloneNum = num;
    num = 999;
    console.log( cloneNum )   // 1000
    

    2.非基本数据类型 -- 指向是引用 用方法实现clone

    错误方式

    var arr = [1,2,3];
    var cloneArr = arr;
    arr[0] = 99;//注意这里只是改变arr中的一个值
    console.log( cloneArr )   // [99, 2, 3]
    
    //扩展  注意理解引用
    arr = ["a","b","c"];      //arr指向新的存储空间 
    console.log( cloneArr )   // [99, 2, 3]
    

    解决方法

    var clone = function( obj ){
        var o; 
        if( typeof obj === "object" ){
            if ( obj === null ) {
                o = null;
            }else if ( obj instanceof Array  ) {
                o = [];
                for (var i = 0; i < obj.length; i++) {
                    o.push( clone( obj[i] ) );  //**确保数组内的任何类型数据均能被正确的clone
                };
            }else{
                o = {}
                for ( var j in obj ) {
                    o[j] = clone( obj( j ) )
                };
           }
        }else{
            o = obj;
        }
        return o;
    }
    
    var cloneObj = clone([null,[1,2,3],"99",100]); 
    cloneObj   //[null, Array[3], "99", 100]
    

    3.其他 dom节点克隆

    var mainDom = document.getElementById('main');
    var cloneMain = mainDom.cloneNode();
    var cloneMainDeep = mainDom.cloneNode( true );  //深度克隆 包括其子节点
    

    相关文章

      网友评论

          本文标题:js 实现 clone()

          本文链接:https://www.haomeiwen.com/subject/noucsttx.html