1. function bindEvent(elem, type, selector, fn) {
    2. if(fn == null) {
    3. fn = selector
    4. selector = null
    5. }
    6. elem.addEventListener(type, event => {
    7. const target = event.target
    8. if(selector) {
    9. // 代理绑定
    10. if(target.matches(selector)) {
    11. fn.call(target. event)
    12. }
    13. } else {
    14. // 普通绑定
    15. fn.call(target. event)
    16. }
    17. })
    18. }
    1. // 普通代理
    2. const btn1 = document.getElementById('btn1')
    3. bindEvent(btn1, 'click', function(event) {
    4. event.preventDefault() // 阻止a标签跳转
    5. const target = event.target
    6. alert(this.innerHTML)
    7. })
    1. const div1 = document.getElementById('div1')
    2. bindEvent(div3, 'click','a',function(event) {
    3. event.preventDefault() // 阻止a标签跳转
    4. const target = event.target
    5. if(target.nodeName === 'A') {
    6. alert(this.innerHTML)
    7. }
    8. })