关于call指向和使用findParent递归的疑问
来源:7-3 阿里笔试题

meimei1314
2019-11-17
老师,以下是根据参照老师的代码,写的类
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递归么?
写回答
1回答
-
快乐动起来呀
2019-11-19
1、之所以用call就是保证 removeItem 中的 this 指向,不然你打印下看看 this 的值有什么变化
2、如果有元素嵌套呢?
012019-11-19
相似问题