js克隆

1. js 克隆分为简单克隆、深度克隆

 

2. 简单克隆: 原始类型为 为传递值,对象类型仍为引用传递。修改新的copy出来的对象,原始对象的数据会发生变化,反之,一样

 

3. 深度克隆: 所有的元素或属性完全复制,与原始对象完全脱离。===>新的对象无论做任何修改都不会影响原始对象,反之,一样

 

 

备注:函数的克隆会在内存中单独开辟一个新的空间,新旧函数之间互不影响。

 

 

实例:

简单克隆:我认为直接是使用 '= '进行赋值

 

 

深度克隆: Array.prototype.deepClone = function (oldArr) {

let newArr = [];

oldArr.map((item,index)=>{

newArr.push(item)

})

 

return newArr;

}

let oldArr = [1,2,3,4,5,6];

let newArr0 = new Array().deepClone(oldArr);

let newArr1 = oldArr;

console.log('原始数据',oldArr,'深度拷贝数据',newArr0,'一般复制',newArr1)

/****************这里如果能使用map的话,返回的是一个新的数组****************/

/*

for(let b =0 ;b <oldArr.length-1;b++){

oldArr[b] = oldArr[b] + 1;

}

*/

for(let i = 0;i<newArr1.length; i++){

newArr1[i] = newArr1[i] + 1;

}

 

console.log('原始数据发生改变',oldArr,'深度拷贝的对象',newArr0,'一般复制',newArr1)

 

console.log('\t**************************************************************\t')

 

Object.prototype.deepClone1 = function () {

let oldJson = this;

let newJson = {}

for(let key in oldJson){

newJson[key] = oldJson[key];

}

return newJson;

}

Object.prototype.deepClone2 = function (oldJson) {

 

let newJson = {}

for(let key in oldJson){

newJson[key] = oldJson[key];

}

return newJson;

}

 

 

let oldJson = {a:1,b:2,c:3};

let newJson0 = oldJson.deepClone1();

let newJson2 = Object.deepClone2(oldJson);

let newJson1 = oldJson;

 

oldJson.a='234325';

newJson1.c='哈哈';

console.log("原始的json是",oldJson,'深度拷贝的json是',newJson0,'一般复制是',newJson1,'深度拷贝2',newJson2,)

/*

console.log(Object)

console.log(Object.prototype)

console.log(Object.prototype.toString)

console.log(Object.prototype.toString.call())

console.log(Object.prototype.toString.call(oldArr))

console.log( Object.prototype.toString.call(oldArr).slice(8,-1))

console.log( Object.prototype.toString.call(jsonTest).slice(8,-1))

console.log( Object.prototype.toString.call(fun).slice(8,-1));//返回对象的具体类型

*/

 

上一篇:less初步接触


下一篇:css 渐变