8_深拷贝.html 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. /* 封装深克隆方法 */
  36. function deepClone(obj){
  37. /* 定义一个空的对象 接收深克隆之后的结果 */
  38. var tmp = {}
  39. /* 循环对象里面的每一项 循环对象下面的属性 */
  40. for(key in obj){
  41. /* 判断当前对象是基本数据类型 还是 引用数据类型 */
  42. if(typeof (obj[key]) == 'object'){
  43. /* 如果是引用数据类型 再次调用函数本身 实现深克隆 */
  44. tmp[key] = deepClone(obj[key])
  45. } else {
  46. /* 如果是基本数据类型 可以直接赋值 */
  47. tmp[key] = obj[key]
  48. }
  49. }
  50. return tmp
  51. }
  52. var a = deepClone(person)
  53. a.school.address = 'shenyang'
  54. console.log(a)
  55. console.log(person)
  56. </script>
  57. </body>
  58. </html>