function delegate(agent,type,selctor,fn) {
//agent.addEventListener(type,fn)如果是这样fn中的this会指向agent
agent.addEventListener(type,function(e){
let target = e.target //target指向实际点击的最里层的元素
let ctarget = e.currentTarget //ctarget会永远指向agent
while(bubble && target != ctarget){
if(target.matches(selctor)){
bubble = fn.call(target,e) === false ? false : true
target = target.parentNode //模拟事件冒泡
// 如果fn有return false 那么阻止默认行为