js 实现 clone()

2016-08-04  本文已影响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 );  //深度克隆 包括其子节点
上一篇 下一篇

猜你喜欢

热点阅读