关于this 指向 ‘a’

来源:11-3 什么是事件代理(面试必考)

别喷了我很菜

2021-04-12

老师,视频里您提到普通绑定中 this.innerHTML 指向的是btn1,而代理绑定中 this.innerHTML 指向的是 a 标签而不是div3,这里我不太明白为什么,是因为判定的时候是通过 fn是否为null 吗?
我的理解是如果:
1. fn为null, 则为普通绑定,this指向的就是这个elem
2. fn不为null则为代理绑定,this指向的就是selector

麻烦老师指出我理解哪里出了问题

写回答

2回答

双越

2021-04-12

this 指向哪里,关键看 call 方法,你在代码中找一下。

0
1
别喷了我很菜
好的,我再看一下
2021-04-12
共1条回复

双越

2021-04-12

把相关代码贴出来吧。

0
1
别喷了我很菜
老师,相关代码就是视频里面所演示的: 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) })
2021-04-12
共1条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程