请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于call指向和使用findParent递归的疑问

老师,以下是根据参照老师的代码,写的类

class List {
	constructor(sel) {
	    this.el = Array.from(document.querySelectorAll(sel))
        var self = this
        this.el.forEach(item => {
	        item.addEventListener('click', function (element) {
	            if (element.target.className.indexOf('del') === 0) {
	                self.removeItem(element.target)
                }
             })
        })
    }
    removeItem(target) {
	    var parent = this.el.filter(elem => {
	        return elem === target.parentNode
        })[0]
        if (parent) {
	        parent.removeChild(target)
        }
     }
}
 

老师,关于以上代码,有2个疑问。
第一,关于call的指向问题。
请问调用removeItem方法的使用,老师为何使用 self.removeItem.call(self, element.target)呢?不适用call指向,在removeItem方法里面,直接使用this.el也可以获取到,不是么?
第二,关于递归调用findParent的问题。
只是在ul上添加了click事件,判断点击的是否是.del元素后,在removeItem方法里面判断其父元素后,就可以删除了。觉得没必要一直向上寻找代理元素,有必要使用findParent递归么?

正在回答 回答被采纳积分+3

1回答

快乐动起来呀 2019-11-19 00:33:07

1、之所以用call就是保证 removeItem 中的 this 指向,不然你打印下看看 this 的值有什么变化

2、如果有元素嵌套呢?

0 回复 有任何疑惑可以回复我~
  • 提问者 meimei1314 #1
    老师,我在constructor和removeItem里面都打印过this了,但是还是找不出有什么区别,麻烦老师,指点一下,谢谢。
    回复 有任何疑惑可以回复我~ 2019-11-19 22:22:57
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号