本文演示了Javascript中自定义事件的用法,供您参考:

在web前端的开发中,很多人可能不使用js的自定义事件,但是如果你做的是一个比较大的项目,特别是当多人共同开发时,自定义事件非常重要,那么js中的自定义事件是什么呢让我们看一个例子。

前端开发人员封装了一个函数:

复制代码代码如下:函数移动(){

警报(a);为了代表n行代码

}

在一段时间内,前端开发人员B必须在A的基础上充实这个功能,所以他会写这个:

复制代码代码如下:函数移动(){

警报(a);为了代表n行代码

警报(b);为了代表n行代码

}

你发现问题了吗b应该注意命名和冲突问题,比如变量和函数的A。过了一会儿,前端开发人员C也需要充实这个功能。

复制代码代码如下:函数移动(){

警报(a);为了代表n行代码

警报(b);为了代表n行代码

警报(c);为了代表n行代码

}

这个时候会很疯狂的。我相信C编写代码是不容易的,解决这个问题的方法是通过自定义事件,我们知道一个元素可以添加相同的事件而不影响自己,例如:

复制代码代码如下:(一window.addeventlistener,函数(){(){

警报(1);

},假);

Window.addEventListener(听到咔哒声,函数(){(){

警报(2);

},假);

当你点击一个页面时,1和2会弹出,所以我们可以用这个方法来定义我们的函数:

复制代码代码如下:window.addeventlistener('move,函数(){(){

警报(3);

},假);

Window.addEventListener('move,函数(){(){

警报(4);

},假);

因此,我们执行移动();当我们将弹出3和4时,移动是一个定制事件,它实际上是一个函数。

下面看看如何将参数传递给事件处理程序:

将代码复制如下:函数包将包含参数作为无参数函数

功能createfunction(obj,strfunc){

var args = {}; / /定义存储和传递到事件处理程序的参数args

如果(obj!)obj =窗口; / /如果全局函数obj =窗口;

传递到事件处理程序参数

对于(var i = 2;i < arguments.length;i++)args.push(参数{我});

没有参数函数包/事件处理程序调用

返回函数(){

obj { strfunc }。申请(obj,args); / /发送参数指定事件处理程序

}

}

功能类(){

}

class1.prototype = { {

显示:函数(){

This.onShow();

},

OnShow:函数(){ }

}

功能objonshow(用户名){

警报(,+用户名);

}

函数测试(){

var obj =新一班();

测试;

obj.onshow = createfunction(null,objonshow

Obj.show();

}

由于事件的名字只是一个传动机构的函数,没有参数信息,因此不能传递参数在这里的程序是createfunction功能,巧妙采用功能封装参数-自由函数作为一种非参数函数。最后,让我们来看看如何实现自定义事件的多重结合:

复制以下代码:自定义事件绑定支持

函数包将具有参数作为无参数函数。

功能createfunction(obj,strfunc){

var args = {}; / /定义存储和传递到事件处理程序的参数args

如果(obj!)obj =窗口; / /如果全局函数obj =窗口;

传递到事件处理程序参数

对于(var i = 2;i < arguments.length;i++)args.push(参数{我});

没有参数函数包/事件处理程序调用

返回函数(){

obj { strfunc }。申请(obj,args); / /发送参数指定事件处理程序

}

}

功能类(){

}

class1.prototype = { {

显示:函数(){

如果(这个展览){

对于(var i = 0;i < this.onshow.length;i++){

这昂秀{我}();

}

}

},

attachonshow:功能(_ehandler){

如果(这。昂秀!){ } = {这昂秀};

This.onShow.push(_ehandler);

}

}

功能objonshow(用户名){

警报(,+用户名);

}

功能objonshow2(testname){

警报(显示:+ testname);

}

函数测试(){

var obj =新一班();

用户名;

Obj.attachOnShow(createfunction(null,objonshow

Obj.attachOnShow(createfunction(null,objonshow2

Obj.show();

}

我们看到,attachonshow实现的基本思想是把操作数组。事实上,我们也可以在事件执行后删除事件处理程序。

将代码复制如下:函数包将包含参数作为无参数函数

功能createfunction(obj,strfunc){

var args = {}; / /定义存储和传递到事件处理程序的参数args

如果(obj!)obj =窗口; / /如果全局函数obj =窗口;

传递到事件处理程序参数

对于(var i = 2;i < arguments.length;i++)args.push(参数{我});

没有参数函数包/事件处理程序调用

返回函数(){

obj { strfunc }。申请(obj,args); / /发送参数指定事件处理程序

}

}

功能类(){

}

class1.prototype = { {

显示:函数(){

如果(这个展览){

对于(var i = 0;i < this.onshow.length;i++){

这昂秀{我}();

}

}

},

attachonshow:功能(_ehandler){ / /附加事件

如果(这。昂秀!){ } = {这昂秀};

This.onShow.push(_ehandler);

},

DetachOnShow:功能(_ehandler){ / /删除事件

如果(这。昂秀!){ } = {这昂秀};

This.onShow.pop(_ehandler);

}

}

功能objonshow(用户名){

警报(,+用户名);

}

功能objonshow2(testname){

警报(显示:+ testname);

}

函数测试(){

var obj =新一班();

用户名;

Obj.attachOnShow(createfunction(null,objonshow

Obj.attachOnShow(createfunction(null,objonshow2

Obj.show();

Obj.detachOnShow(createfunction(null,objonshow

(obj。节目); / /删除,显示剩余的一

Obj.detachOnShow(createfunction(null,objonshow2

(obj。节目); / /两被删除,一个不显示

}

希望本文能对大家的javascript程序设计有所帮助。