而一楼并未说明它的真正意思,所举的两个例子也都是委托的具体运用.正document.body.focus = function(){}是将后边的执行函数"委托"给了句柄一样,但在JS中没有委托与句柄等相关概念,它中是一种编程的风格而已.上文表示当body得到焦点后会执行后边的函数.而一楼的别一个例子,将函数委托给了一个属性,那么这个属性就相当于一个方法了.事实上JS实现面向对象方法时,的确就是这样实现的.不但可以实现一个无参数的方法,也可以实现一个有参数的方法.正如一楼所写的第二个例子一样,你可以使用对象的del(n)去直接执行这样一个函数的!
而将函数直接委托给变量而不是对象的属性也是一样的.只要用XXX()就可以执行对应的函数了!但你也可能看到来了,想要问一下var xxx = function(){}与function xxx(){}的区别.两者在使用上有其实是没有区别的.可以看作一样.但在使用this等指针时是有区别的!还有就是function后边如果不是一个单纯的方法而是一个对象时,前一种方法直接开辟了内存空间,而后一种只是一个定义,使用时才开辟空间的!不过大多数时间使用前一种方法是为了正确的引用this变量,(称指针有些不太合适)而使用的一种方法,这借助了JS的闭包特性的!
比方说a元素里面包含了b元素(或者说a元素是b元素的父元素),当b元素触发事件时,会同时把事件冒泡给a元素,也就是说a元素也会触发事件。利用这个原理,b元素就可以不对事件做任何处理,而是委托给a元素去处理,这样,当a元素中动态添加了多个与b元素同级的元素(也就是a新添加了几个儿子)或者是b元素的子元素(也就是a的孙子),这些新添加的元素都不用再绑定事件处理函数了,通通由a元素去处理即可(a元素通过target对象就可以知道事件委托方是哪个元素,从而进行不同的处理),这样就简化了程序,也避免了相互之间发生冲突的可能性。这就是事件委托。