8_深克隆3.html 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. friend: {
  15. name: 'lisi'
  16. }
  17. }
  18. /* 封装深克隆的方法 */
  19. function deepClone(data) {
  20. /* 定义一个空对象 用于接收深克隆后的结果 */
  21. var tmp = {}
  22. // if(Array.isArray(data)){
  23. // tmp = []
  24. // } else {
  25. // tmp = {}
  26. // }
  27. tmp = Array.isArray(data) ? [] : {}
  28. /* 循环对象里面的每一项 遍历对象下面的属性 */
  29. for(key in data){
  30. /* 判断当前对象下面的属性是基本数据类型 还是 引用数据类型 */
  31. if(typeof (data[key]) == 'object'){
  32. /* 如果是引用数据类型 再次调用函数本身 */
  33. tmp[key] = deepClone(data[key])
  34. } else {
  35. /* 如果是基本数据类型 可以直接赋值 */
  36. tmp[key] = data[key]
  37. }
  38. }
  39. return tmp
  40. }
  41. var a = deepClone(person)
  42. a.friend.name = 'xiaohong'
  43. console.log(person)
  44. console.log(a)
  45. </script>
  46. </body>
  47. </html>