iCMS

关于事件侦听和抛发

iCMS http://www.hlike.cn 2019-08-06 20:49 出处:网络 编辑:@iCMS
今天就至今进入主题吧! 一共两件事:第一是在降低耦合度中侦听和抛发中函数执行的顺序,第二就是为什么要先侦听再抛发

今天就至今进入主题吧!

一共两件事:第一是在降低耦合度中侦听和抛发中函数执行的顺序,第二就是为什么要先侦听再抛发

1、事件对象中函数的执行顺序:

在侦听的事件函数中如果想要先执行这句话就要将这句话写在抛发事件之前

关于事件侦听和抛发

关于事件侦听和抛发

关于事件侦听和抛发

关于事件侦听和抛发

当写在抛发事件之后就会先执行抛发事件,谁接收了这个抛发事件(也就是说谁添加了这个事件侦听)就执行谁,在这里将事件evyt抛发出去,将flyy这个类型以参数形式被evt带出去了,这个时候在obj2.init中接受了这个事件,继续执行添加的侦听函数,所以会先执行"我先打印"这句话;继而回到obj2.init中继续执行自定义一个事件evt,将fly这个类型以参数形式,抛发出去,这个时候就回到了obj1.init中接受了这个事件,继续执行函数中最后一句语句,打印出“我后打印”

关于事件侦听和抛发

关于事件侦听和抛发

2、为什么要先添加事件侦听,再抛发?

在对象事件中,因为在这里的事件是自己定义的,属于私有,抛发的时候这个事件还没有创建出来,这个时候就涉及到执行先后顺序的问题了,因为调用的是对象方法,所以调用的时候要有先后顺序;在普通函数事件中;也是要先侦听再抛发,虽然函数都是存储在堆中,但是在存储函数中也是有顺序的,如果先传入一个自定义事件,但是该事件在这个时候还没有写入函数,也不会显示结果。

1、事件函数:

这个是没有结果的:

关于事件侦听和抛发

这个是正确的打开方式:

关于事件侦听和抛发

2、普通函数:

这个是没有结果的

关于事件侦听和抛发

这个才是正确打开方式:

关于事件侦听和抛发

0

精彩评论

暂无评论...
验证码 换一张
取 消