博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery装饰者模式绑定DOM事件
阅读量:6415 次
发布时间:2019-06-23

本文共 1506 字,大约阅读时间需要 5 分钟。

hot3.png

在阅读本文之前 请阅读此文 :或阅读《JavaScript设计模式与开发实践》第12章 《房子装修——装饰者模式》

在《设计模式》第12章中12.2装饰已有功能对象时给了一个原生JS的示列代码,我根据此扩写的 jquery代码。

首先引入jQuery文件。我引入的3.2.1版本。

HTML:

模拟已有绑定事件的JS代码:

$("input").on("click", function () {            console.log("我也是第一次绑定")        }).on("change", function () {            console.log($(this).val())        })

 

装饰器JS代码

//装饰者模式:在不改变原对象的基础上,对其进行扩展 (方法或者属性)        /**         *          * @param {string} selecter -jquery 选择器          * @param {object} _event  -事件对象 ()         * @param {Boolean} isPrev - 是否在已存在事件前插入事件         */        var decorator = function (selecter, _event, isPrev) {            var _target = $(selecter),                _eventsObj = $._data(_target[0], 'events'); //获取JQ事件对象信息,注意:1.8之后要写 $._data(原生DOM,要获取的数据名称)            console.log(_eventsObj);            if (_eventsObj && _eventsObj[_event.type] && typeof _eventsObj[_event.type][0].handler == "function") {                _eventsObj[_event.type][isPrev ? 'unshift' : 'push'](_event)            } else {                _target.on(_event.type, _event.handler);            }            return _target; //返回jqDOM对象        };        decorator("#test", {            type: 'click',            handler: function () {                console.log("装饰一下");            }        });        decorator("#test", {            type: 'click',            handler: function () {                console.log("老子不管,老子要第一个显示")            }        }, true);

 

其中$._data()使用方法见此 

下一次写 AOP(面向切片编程)

-end-

 

 

转载于:https://my.oschina.net/swmhxhs/blog/3017802

你可能感兴趣的文章
移动开发阻止默认事件,1默认长按复制2拖动时页面默认移动
查看>>
todo
查看>>
关于BufferedInputStream和BufferedOutputStream的实现原理的理解
查看>>
啊蛋的杂货铺即将上线
查看>>
GIT相关文档
查看>>
Mybatis用注解方式来操作mysql数据库
查看>>
[Jquery] js获取浏览器滚动条距离顶端的距离
查看>>
使用border做三角形
查看>>
xhEditor 简约而不简单哦
查看>>
Linux3.10.0块IO子系统流程(3)-- SCSI策略例程
查看>>
学生管理系统~~~
查看>>
mysql 使用set names 解决乱码问题的原理
查看>>
Linux配置SVN服务器(subversion+apache)
查看>>
安卓XML布局中,常用单位的区别~
查看>>
属性动画ValueAnimator用法
查看>>
Eclipse中Ctrl+Alt+Down和Ctrl+Alt+Up不起作用
查看>>
汉堡--结对--软件工程
查看>>
计算机二级C考试有感
查看>>
Android studio 中创建AIDL Service
查看>>
[转]javascript 读取和写入文件,js如何读取文件,js写入文件,js文件操作,js文件夹...
查看>>