Vue实现数据双向绑定的两种方式

不念不忘少年蓝@ 2023-02-16 04:11 27阅读 0赞

第一种是———————》 数据劫持(Object.defineProperty)
第二种是———————》 代理(proxy)

面试前准备(ps:被问过一次了)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>$Title$</title>
  9. </head>
  10. <body>
  11. ES5:Object.defineProperty
  12. <div style="width: 100%;height: 1px;background-color:red;margin-top: 10px"></div>
  13. <br/>
  14. 输入框:<span id="sp"></span>
  15. <br/>
  16. <input type="text" id="ipt" autocomplete="off">
  17. <script>
  18. let obj = {
  19. name: ''
  20. }
  21. let newObj = {
  22. ...obj
  23. }
  24. Object.defineProperty(obj, 'name', {
  25. get() {
  26. return newObj.name
  27. },
  28. set(v) {
  29. newObj.name = v
  30. observe()
  31. }
  32. })
  33. function observe() {
  34. sp.innerHTML = newObj.name
  35. }
  36. ipt.oninput = function () {
  37. obj.name = this.value
  38. }
  39. </script>
  40. <br/><br/>
  41. ES6:Proxy
  42. <br/>
  43. <div style="width: 100%;height: 1px;background-color:red;margin-top: 10px"></div>
  44. <br/>
  45. 输入框:<span id="sp1"></span>
  46. <br/>
  47. <input type="text" id="ipt1">
  48. <script>
  49. let obj2 = {
  50. name: ''
  51. }
  52. obj2 = new Proxy(obj2, {
  53. get(target, p) {
  54. return target[p]
  55. },
  56. set(target, p, value) {
  57. target[p] = value
  58. observe2()
  59. }
  60. })
  61. function observe2() {
  62. sp1.innerHTML = obj2.name
  63. }
  64. ipt1.oninput = function () {
  65. obj2.name = this.value
  66. }
  67. </script>
  68. </body>
  69. </html>

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,27人围观)

还没有评论,来说两句吧...

相关阅读