委托

委托分为:行为委托 和 事件委托。

事件委托:利用冒泡的原理,把事件加到父级元素上,触发执行效果。
事件委托的好处:
1. 提高性能。
2. 新添加的元素,还会有之前的事件。
下面我将通过例子说明这两个好处。

比如现在有这么一个需求,ul下面的每一个li,当鼠标移动上去的时候,让它的背景色变为红色,当鼠标离开的时候,将它的背景色去掉。 如果不用事件委托的话,你可能会这么写:




如果ul下面有很多li,那么用for循环是不是特别影响性能呢。

如果用事件委托实现的话,代码如下:



这样写的话,就不需要for循环了,会大大提高性能。

还有一个好处就是,新添加的元素,还会有以前的事件。如果你用for循环的话,新添加的元素就没有以前的事件了。看代码:




执行效果如下图:


      

鼠标移到555,666,777上面什么反应都没有。

但是,如果你用事件委托的话,就不会出现这种现象。



执行效果:



注:for循环给li添加事件,当有动态生成的li元素被添加进入之后,是没有事件的,因为for循环已经执行完毕了。但是,如果使用事件委托(或者叫事件代理),即使自己没有事件,只要父级有事件,那么就会触发。


行为委托:
直接上代码:



运行结果:


在这段代码中,Task和son并不是类(或者函数),它们都是对象。son通过Object.create()创建,它的

[[Prototype]]委托了Task对象。相比于面向类,我会把这种编码风格称作为“对象关联”。


this.setName(name); son中的方法会首先寻找son自身是否有setName(),但是son中并没有这个方法名,因此

会通过[[Prototype]]委托关联到Task继续寻找,这时就可以找到setName()方法。此外,由于调用位置触发了

this的隐式绑定规则(不懂得可以看我以前的文章),因此虽然setName()方法在Task中,运行时this任然会绑定

到son,这正是我们想要的。

换句话说,行为委托意味着某些对象(son)在找不到属性或者方法引用时会把这个请求委托给另一个对象

(Task)。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值