采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,视频里您提到普通绑定中 this.innerHTML 指向的是btn1,而代理绑定中 this.innerHTML 指向的是 a 标签而不是div3,这里我不太明白为什么,是因为判定的时候是通过 fn是否为null 吗? 我的理解是如果: 1. fn为null, 则为普通绑定,this指向的就是这个elem 2. fn不为null则为代理绑定,this指向的就是selector
麻烦老师指出我理解哪里出了问题
this 指向哪里,关键看 call 方法,你在代码中找一下。
好的,我再看一下
把相关代码贴出来吧。
老师,相关代码就是视频里面所演示的: function bindEvent(elem, type, selector, fn) { if (fn == null) { fn = selector selector = null } elem.addEventListener(type, event => { const target = event.target if (selector) { // 代理绑定 if (target.matches(selector)) { fn.call(target, event) } } else { // 普通绑定 fn.call(target, event) } }) } // 普通绑定 const btn1 = document.getElementById('btn1') bindEvent(btn1, 'click', function (event) { // console.log(event.target) // 获取触发的元素 event.preventDefault() // 阻止默认行为 alert(this.innerHTML) }) // 代理绑定 const div3 = document.getElementById('div3') bindEvent(div3, 'click', 'a', function (event) { event.preventDefault() alert(this.innerHTML) })
登录后可查看更多问答,登录/注册
针对时下面试高频考点,帮助新人js面试快速通关
1.6k 17
1.8k 11
1.3k 11
1.2k 11