js自定义事件及事件交互原理概述(一)

 更新时间:2013年02月01日 12:22:30   作者:  
在JS中事件是JS与浏览器交互的主要途径,本文主要介绍下最简单的自定义事件,不过还有很多缺陷,感兴趣的朋友可以了解下,或许对你学习自定义事件有所帮助
在JS中事件是JS与浏览器交互的主要途径。事件是一种叫做观察者的设计模式,这是一种创建松散耦合代码的技术。对象可以发布事件,用来表示在该对象生命周期中某个有趣的时刻到了。然后其他对象可以观察该对象,等待这些有趣的时刻到来并通过运行代码来响应。

观察者模式有两类对象组成:主题和观察者。主体负责发布事件,同时观察者通过订阅这些事件来观察该主体。该模式的一个关键概念是主体并不知道观察者的任何事情,也就是说它可以独自存在并正常运作即使观察者不存在。从另一方面说,观察者知道主体并能注册事件的回调函数(事件处理程序)。涉及DOM上时,DOM元素便是主体,你的事件处理代码便是观察者。

事件是与DOM交互的最常见的方式,但它们也可以用于非DOM代码中----通过实现自定义事件。自定义事件背后的概念是创建一个管理事件的对象,让其他对象监听那些事件。说简单点就是我们希望在程序运行的时候,路线可能会有很多,如果程序运行到了一个特殊的地方,我们希望立刻运行用户注册的方法里面的代码,运行完毕后再继续运行,这个过程叫做监听。

例如,创建一个文件MyEvent.js文件,里面创建一个类:
复制代码 代码如下:

function MyEvent(){
this.handler;
}
MyEvent.prototype={
addHandler:function(handler)
{
this.handler=handler;
},
fire:function()
{
this.handler();
},
removeHandler:function()
{
this.handler=null;
}
}

上面使用js原型的思想创建的一个类,如果读者不太了解可以查看相关资料。MyEvent类型有一个单独的属性handler,用于存储事件处理程序(也就是用户注册的方法)。还有三个方法:addHandler(),用于注册事件处理程序;fire(),用于触发一个事件;以及removeHandler(),用于注销事件的处理程序。

然后我们可以这样使用,新建一个html文件,放于和MyEvent.js同一个目录,方便引用。代码如下:
复制代码 代码如下:

<html>
<head>
<title></title>
<script type="text/javascript" src="MyEvent.js"></script>
<script type="text/javascript">
function init()
{
//初始化一个事件对象
var myEvent=new MyEvent();
//注册方法
myEvent.addHandler(myMethod);
//运行到此处时触发事件
myEvent.fire();
//移除事件注册的方法
myEvent.removeHandler();
//再次触发事件,发现无效
myEvent.fire();
}
function myMethod()
{
alert("成功");
}
</script>
</head>
<body>
<input type="button" onclick="init()" value="测试" />
</body>
</html>

上述的注释已经很详细的说明了其中的一种使用方式。这就是一个最简单的自定义事件,不过还有很多缺陷,如何优化将在(二)里面进行讲解。

相关文章

  • js 图片懒加载的实现

    js 图片懒加载的实现

    这篇文章主要介绍了js 图片懒加载的实现,帮助大家更好的优化自身网页,提高网页响应速度,感兴趣的朋友可以了解下
    2020-10-10
  • 微信小程序缓存过期时间的相关设置(推荐)

    微信小程序缓存过期时间的相关设置(推荐)

    这篇文章主要介绍了微信小程序缓存过期时间的相关知识,主要包括微信小程序缓存机制介绍及哪些是一定需要过期的缓存,本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 有趣的bootstrap走动进度条

    有趣的bootstrap走动进度条

    这篇文章主要为大家详细介绍了如何实现有趣的bootstrap走动进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JS数组Object.keys()方法的使用示例

    JS数组Object.keys()方法的使用示例

    这篇文章主要介绍了JS数组Object.keys()方法的使用,结合实例形式分析了javascript使用Object.keys()方法进行数组遍历、读取相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • 浅谈JS封闭函数、闭包、内置对象

    浅谈JS封闭函数、闭包、内置对象

    下面小编就为大家带来一篇浅谈JS封闭函数、闭包、内置对象。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • js实现图片放大并跟随鼠标移动特效

    js实现图片放大并跟随鼠标移动特效

    这篇文章主要为大家详细介绍了js实现图片放大并跟随鼠标移动特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 使用snowfall.jquery.js实现爱心满屏飞的效果

    使用snowfall.jquery.js实现爱心满屏飞的效果

    这篇文章主要介绍了使用snowfall.jquery.js实现爱心满屏飞的效果的相关资料,需要的朋友可以参考下
    2017-01-01
  • 打造通用的匀速运动框架(实例讲解)

    打造通用的匀速运动框架(实例讲解)

    下面小编就为大家带来一篇打造通用的匀速运动框架(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • JS字符串累加Array不一定比字符串累加快(根据电脑配置)

    JS字符串累加Array不一定比字符串累加快(根据电脑配置)

    言归正传:性能差异较大的机器运行结果会RT 出现大的差异,为了保险起见。还是推荐使用Array 来进行字符串拼接操作
    2012-05-05
  • JavaScript使用Promise封装Axios进行高效开发

    JavaScript使用Promise封装Axios进行高效开发

    这篇文章主要介绍了JavaScript使用Promise封装Axios进行高效开发,Axios是一个基于Promise的HTTP库,它可以帮助我们更方便地发起HTTP请求,并且提供了许多高级功能,感兴趣的同学可以参考下文
    2023-05-05

最新评论