事件的原理以及关于框架的底层原理

事件的基础

一,事件:整个JavaScript 的核心

JavaScript是一个事件驱动性语言,全靠事件驱动来执行函数。
其中包括两大类
1.侦听事件
2.抛发事件
那么如何完成事件的侦听和抛发呢?

        侦听事件
        抛发事件

        所有继承EventTarget类别的都是可以抛发和侦听事件的,
        类似于打电话和接电话,
        事件对象
        var o=new EventTarget();
        侦听事件
        
		我们平时都是用click和clickHandler这种方法直接驱动事件函数的,
		也就是说,部分抛发事件已经是浏览器写好的,但是我们可以自定义抛发
	
		那么他的原理是什么呢
		 o.addEventListener("chilema",chilemaHandler);
		为了检验事件的原理,我随意创建了一个事件名,叫吃了么事件,吃了么Handler;
	
        创建事件对象
        var evt=new Event("chilema");
        evt.a=10;(创建事件对象,这一步就是我们使用事件时省略的那两步骤,这个目的是)
        
        抛发事件,谁侦听,就向谁抛发,抛发的事件类型必须和事件侦听类型完全一样
        o.dispatchEvent(evt);
        然后再创建一个要执行的事件函数;
              function chilemaHandler(e){
            console.log(e.a);
        } 
        这样我们就完成了整个事件的过程。
        这就是框架的原理,抛发事件和监听事件

有时候我们想在一个函数中运行另一个函数

        var obj={
            a:function(){
                obj1.b();
            },
            b:function(){
                console.log("bbb");
            }
        }


        /*var obj1={
            a:function(){
                obj.b();
            },
            b:function(){
                console.log("ccc");
            }
        }*/


        obj.a();
        obj1.a(); 

但是当我的obj1去掉的话,浏览器就会报错(因为没定义必然报错)
在这里插入图片描述
这种情况就叫做高耦合

那如何去解耦呢?

这时候就是事件的概念,我先把要运行的函数存到一个中介里,这个中介就是document。

         var obj={
            a:function(){
                document.addEventListener("abc",this.b);
            },
            b:function(e){
                console.log("bbb",e.a);
              
            }
        }

    
        var obj1={
            a:function(){
                document.addEventListener("obj1",this.b);
                var evt=new Event("abc");
                evt.a=10;
               document.dispatchEvent(evt);(抛发事件代码)
            },
            b:function(e){
                console.log("ccc",e.a);
            }
        }
        
        obj.a();
        obj1.a();
        
        这样我们就能拿到这个抛发的事件
        这个就叫做事件抛发的解耦;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值