# 八.代理模式

  • 由于一个对象不能直接引用另一个对象,所以需要通过代理对象在这两个对象之间起到中介作用
  • 可以在使用者和目标对象之间加一个代理对象,通过代理可以实现控制

# 1.类图

# 2.代码

class Google {
  constructor() {}
  get() {
    return "google"
  }
}
class Proxy {
  google: any
  constructor() {
    this.google = new Google()
  }
  get() {
    return this.google.get()
  }
}
let proxy = new Proxy()
let ret = proxy.get()
console.log(ret)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 3.场景

# 3.1 事件委托

  • 事件捕获指的是从 document 到触发事件的那个节点,即自上而下的去触发事件
  • 事件冒泡是自下而上的去触发事件
  • 绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。true 为事件捕获;false 为事件冒泡,默认 false
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>事件委托</title>
  </head>

  <body>
    <ul id="list">
      <li>1</li>
      <li>2</li>
      <li>3</li>
    </ul>
    <script>
      let list = document.querySelector("#list")
      list.addEventListener("click", (event) => {
        alert(event.target.innerHTML)
      })
    </script>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 3.2 图片懒加载


1

# 3.3 防抖代理


1

# 3.4 跨域代理


1

# 3.5 代理缓存

# 3.6 $.proxy

# 3.7 Proxy