8_深拷贝.html 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 person = {
  12. // name: 'zs',
  13. // age: 18
  14. // }
  15. // function deepClone (obj){
  16. // var tmp = {}
  17. // for(key in obj){
  18. // tmp[key] = obj[key]
  19. // }
  20. // return tmp
  21. // }
  22. // // console.log(deepClone(person))
  23. // var a = deepClone(person)
  24. // a.name = 'lisi'
  25. // console.log(a)
  26. // console.log(person)
  27. var person = {
  28. name: 'zs',
  29. age: 18,
  30. school: {
  31. address: 'harbin',
  32. num: 10000
  33. }
  34. }
  35. // var a = deepClone(person)
  36. // a.school.address = 'heida'
  37. // a.name = 'lisi'
  38. // console.log(a)
  39. // console.log(person)
  40. /* 封装深克隆的方法 */
  41. function deepClone(obj) {
  42. /* 定义一个空对象 用于接收深克隆后的结果 */
  43. var tmp = {}
  44. /* 循环对象里面的每一项 循环对象下面的属性 */
  45. for (key in obj) {
  46. /* 判断当前对象的属性是基本数据类型 还是 引用数据类型 */
  47. if (typeof (obj[key]) == 'object') {
  48. /* 如果是引用数据类型 再次调用函数本身 再次实现深克隆 */
  49. tmp[key] = deepClone(obj[key])
  50. } else {
  51. /* 如果是基本数据类型 直接复制 */
  52. tmp[key] = obj[key]
  53. }
  54. }
  55. return tmp
  56. }
  57. var a = deepClone(person)
  58. a.school.address = 'heigongcheng'
  59. console.log(a)
  60. console.log(person)
  61. </script>
  62. </body>
  63. </html>