8_深拷贝.html 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <script>
  11. // var a = {
  12. // age: 30
  13. // }
  14. // var str = JSON.stringify(a)
  15. // var obj = JSON.parse(str)
  16. // obj.age = 18
  17. // console.log(a)
  18. // console.log(obj)
  19. // var person = {
  20. // name: 'zs',
  21. // age: 18
  22. // }
  23. // function deepClone(obj){
  24. // var tmp = {}
  25. // for(key in obj){
  26. // tmp[key] = obj[key]
  27. // }
  28. // return tmp
  29. // }
  30. // var a = deepClone(person)
  31. // a.name = 'lisi'
  32. // console.log(person)
  33. // console.log(a)
  34. var person = {
  35. name: 'zs',
  36. age: 18,
  37. school: {
  38. address: 'harbin',
  39. num: 10000
  40. }
  41. }
  42. // var a = deepClone(person)
  43. // a.school.num = 30000
  44. // console.log(a)
  45. // console.log(person)
  46. /* 封装深克隆的方法 */
  47. function deepClone(obj) {
  48. /* 定义一个空对象 接收深克隆后的结果 */
  49. var tmp = {}
  50. /* 循环对象里面的每一项 遍历对象下面的属性 */
  51. for(key in obj){
  52. /* 判断当前对象下面的属性是基本数据类型 还是 引用数据类型 */
  53. if(typeof (obj[key]) == 'object'){
  54. /* 如果是引用数据类型 再次调用函数本身 */
  55. tmp[key] = deepClone(obj[key])
  56. } else {
  57. /* 如果是基本数据类型 可以直接赋值 */
  58. tmp[key] = obj[key]
  59. }
  60. }
  61. return tmp
  62. }
  63. var a = deepClone(person)
  64. a.school.num = 200
  65. console.log(a)
  66. console.log(person)
  67. </script>
  68. </body>
  69. </html>