数码资讯
Javascript中自定义事件的使用分析
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
本文演示了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程序设计有所帮助。
在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程序设计有所帮助。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。