首页 web前端 js教程 js自定义事件及事件交互原理概述(二)_javascript技巧

js自定义事件及事件交互原理概述(二)_javascript技巧

May 16, 2016 pm 05:42 PM
交互 自定义事件

js自定义事件(一)的目的只是让大家简单的理解自定事件是如何模拟出来的,大家不难发现会有很多缺陷,比如:
1、此事件对象只能注册一个事件,不能提供多个事件
2、注册方法没有返回的一些信息

下面我们就来解决这些问题。如下为MyEvent.js源代码:

复制代码 代码如下:

function MyEvent(){
this.handlers={};
}
MyEvent.prototype={
addHandler:function(type,handler)
{
if(typeof this.handlers[type]=="undefined")
{
this.handlers[type]=[];
}
this.handlers[type].push(handler);
},
fire:function(event)
{if(this.handlers[event.type] instanceof Array)
{
var handlers=this.handlers[event.type];
for(var i= 0, len=handlers.length;i{
handlers[i](event);
}
}
},
removeHandler:function(type,handler)
{
if(this.handlers[type] instanceof Array)
{
var handlers=this.handlers[type];
for(var i= 0, len=handlers.length;i{
if(handlers[i]===handler)
{
break;
}
}
handlers.splice(i,1);
}
}
};

此类就是对第一篇的优化。
属性handler变成了handlers,变成了一个数组
addHandler()方法接受两个参数:事件类型和用于处理该事件的函数。当调用该方法时,会进行一次检查,看看handlers属性中是否已经存在一个针对该事件类型的数组
;如果没有,则创建一个新的。然后使用push()将该处理程序添加到数组的末尾。

fire()方法用于触发一个事件,该方法接受一个参数,是一个至少包含type属性的对象,不然无法确定handlers里面是否已经存在。它会通过此type去查找对应该事件类型的一组处理程序,调用各个函数,并给出event对象。因为这些都是自定义对象,所以event对象上面的其他东西可以由你自己定义。

removeHandler()方法时addHandler()的辅助,它们接受的参数一样:事件的类型和事件处理程序。这个方法搜索事件处理程序的数组找到要删除的处理程序的位置。如果找到了,则使用break操作符退出循环。然后使用splice()方法将该项目从数组中删除。

这里使用方式我们换一种比较长用的形式,现在据我说知很多产品在使用事件上有两种方式,一种是直接继承(js本省没有此概念,不过我们可以通过原型链模拟出继承的效果,此处不做详细解释)此事件对象,那么就会拥有了这些行为,不过此方法比较局限,另一种方式更常用一些,就是需要使用事件的类上面创建一个属性用于存放此对象。如:子相同目录下再创建一个Student.js文件,里面的代码如下:
复制代码 代码如下:

function Student(name)
{
this.myEvent=new MyEvent();
this.name=name;
}
Student.prototype={
setName:function(name)
{
var eventStart={
type:"changeNameStart",
newName:name,
oldName:this.name
};
this.myEvent.fire(eventStart);
this.name=name;
}
}

这里有一个学生类,构造函数里面初始化一个MyEvent对象作为属性,通过参数初始化name属性。

提供一个方法setName用于改变名字,不过在改变名字之前设置了可能触发事件changNameStart的监听。
创建一个html页面,放于同个目录下,代码如下:
复制代码 代码如下:













这样使用起来就会很方便,也是一种常用的使用方式。
一般在真正的项目里面使用使用事件时我们还需要做一些优化,比如:
1、用户并不知道我们提供了哪些事件,从代码来看好像什么事件都可以添加到handlers里面,但是真正起效果的(我们设置fire()方法的地方)事件我们并不能从代码里面很直观的看出来,一般做产品,在这方面都需要再做考虑。

2、有没有发现fire的参数event好像没用固定,在大兴项目里面,最好event也做成一个类型,在fire的地方就比较方便使用一些,event可能会有很多种类型,那时可能fire里面会出现一些判定了。
希望对初入js事件的读者有所帮助,互相交流。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

打开win11的分屏交互方式 打开win11的分屏交互方式 Dec 25, 2023 pm 03:05 PM

在win11系统中,我们可以通过打开分屏交互来让多个显示器使用同一款系统,共同操作,但是很多朋友不知道分屏交互怎么开启,其实只要在系统设置中找到显示器就可以了,下面一起来学习一下吧。win11分屏交互怎么打开1、点击开始菜单,找到其中的“设置”2、然后在其中找到“系统”设置。3、进入系统设置后,在左侧选择“显示”4、接着在右边的多显示器中选择“扩展这些显示器”即可。

Vue3+TS+Vite开发技巧:如何与后端API进行交互 Vue3+TS+Vite开发技巧:如何与后端API进行交互 Sep 08, 2023 pm 06:01 PM

Vue3+TS+Vite开发技巧:如何与后端API进行交互引言:在网页应用开发中,前端与后端之间的数据交互是一个非常重要的环节。Vue3作为一种流行的前端框架,与后端API进行交互的方式也有很多种。本文将介绍如何使用Vue3+TypeScript+Vite开发环境来与后端API进行交互,并通过代码示例来加深理解。一、使用Axios发送请求Axios是

VUE3基础教程:使用Vue.js自定义事件 VUE3基础教程:使用Vue.js自定义事件 Jun 15, 2023 pm 09:43 PM

Vue.js是一款流行的JavaScript框架,它提供了很多方便的特性,所以它在开发Web应用程序时非常有用。Vue.js中的自定义事件系统使其更加灵活,并且可以通过组件事件触发和处理来实现更好的代码重用性。在本文中,我们将讨论如何使用Vue.js的自定义事件。Vue.js中自定义事件的基础在Vue.js中,我们可以通过v-on指令来监听DOM事件。例如,

uniapp实现如何使用JSBridge实现与原生交互 uniapp实现如何使用JSBridge实现与原生交互 Oct 20, 2023 am 08:44 AM

uniapp实现如何使用JSBridge实现与原生交互,需要具体代码示例一、背景介绍在移动应用开发中,有时需要与原生环境进行交互,比如调用原生的一些功能或获取原生的一些数据。uniapp作为一种跨平台的移动应用开发框架,提供了一种方便的方式来实现与原生交互,即使用JSBridge进行通信。JSBridge是一种前端与移动原生端进行交互的技术方案,通过在前端和

PHP与JavaScript交互的方法及常见问题解答 PHP与JavaScript交互的方法及常见问题解答 Jun 08, 2023 am 11:33 AM

PHP与JavaScript交互的方法及常见问题解答随着互联网的快速发展,网页已经成为人们获取信息、进行交流的主要平台。而PHP和JavaScript是开发网页的两种最常用语言。它们都具有各自的优点和适用场景,而在大型网站的开发过程中,两者的结合将会拓展开发人员的的工作能力。本文将介绍PHP和JavaScript交互的方法及常见问题解答。PHP与JavaSc

前端后端开发的发展历程与趋势展望 前端后端开发的发展历程与趋势展望 Mar 26, 2024 am 08:03 AM

随着互联网的迅猛发展和信息技术的日新月异,前端和后端开发作为两个重要的IT领域在过去几十年中也取得了巨大的进步。本文将探讨前端后端开发的发展历程,分析当前的发展趋势,并展望未来的发展方向。一、前端后端开发的发展历程早期阶段在互联网刚刚兴起的时期,网站开发主要关注内容的呈现,前端开发工作主要集中在HTML、CSS和JavaScript等技术上,以实现页面的基本

使用企业微信接口与PHP进行数据交互的方法 使用企业微信接口与PHP进行数据交互的方法 Jul 05, 2023 am 09:00 AM

使用企业微信接口与PHP进行数据交互的方法企业微信是企业内部沟通和协作的重要平台,开发者可以通过企业微信接口实现与企业微信的数据交互。本文将介绍如何使用PHP语言来调用企业微信接口,实现数据的传输与处理。首先,需要创建一个企业微信应用,并获取相应的CorpID、Secret以及AgentID。这些信息可以在企业微信管理后台的“应用与小程序”中找到。接下来,我

Vue自定义事件的用法和常见场景 Vue自定义事件的用法和常见场景 Sep 15, 2023 pm 12:12 PM

Vue自定义事件的用法和常见场景Vue.js是一个流行的JavaScript框架,用于构建用户界面。在Vue中,我们可以通过自定义事件来实现组件之间的通信。自定义事件是Vue中非常有用的功能之一,可以让我们在不同的组件之间传递数据和触发特定的行为。本文将介绍Vue中自定义事件的用法和常见场景,并提供具体的代码示例。一、自定义事件的基本用法在Vue中,我们可以

See all articles