js学习总结之DOM2兼容处理this问题的解决方法


Posted in Javascript onJuly 27, 2017

针对上一篇提到的DOM2级存在的兼容问题,这里先说一下this的问题。

/*
 bind:处理DOM2级事件绑定的兼容性问题(绑定方法)
 @parameter:
  curEle->要绑定事件的元素
  evenType->要绑定的事件类型("click","mouseover")
  evenFn->要绑定的方法
*/
function bind(curEle,evenType,evenFn){
 if('addEventListener' in document){
  curEle.addEventListener(evenType,evenFn,false);
  return;
 }
 //给evenFn化妆 并且把化妆前的照片贴在自己对应的脑门上
 var tempFn = function(){
  evenFn.call(curEle)
 }
 tempFn.photo = evenFn;
 //首先判断自定义属性之前是否存在,不存在的话创建一个,由于要存储多个化妆后的结果,所以我们让其值是一个数组
 if(!curEle["mybind"+evenType]){//根据不同的事件类型是不同的数组
  curEle["mybind"+evenType] = [];
 }
 curEle["mybind"+evenType].push(tempFn);
 curEle.attachEvent("on"+evenType,tempFn);
 //这里的开始想法是改变this的指向,把this不指向window
 /*
  box.attachEvent("onclick",function(){
   fn1.call(box)
  })
  这样虽然解决了this的问题,但是又抛出了一个新的问题,不知道该如何删除了(我们不知道匿名函数是谁)
  var tempFn = function(){
   fn1.call(box)
  }
  box.attachEvent("onclick",tempFn);
  box.detachEvent("onclick",tempFn);
 */
}

function unbind(curEle,evenType,evenFn){
 if('removeEventListener' in document){
  curEle.removeEventListener(evenType,evenFn,false);
  return;
 }
 //拿evenFn到curEle["myBind"]这里找化妆后的结果,找到之后再事件池中把化妆后的结果移除事件池
 var ary = curEle['myBind'+evenType];
 for(var i = 0;i<ary.length;i++){
  if(ary[i].photo===evenFn){
   curEle.detachEvent("on"+evenType,ary[i]);
   break;
  }
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript动态加载二
Aug 22 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
Sep 21 Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 Javascript
jquery实现的鼠标下拉滚动置顶效果
Jul 24 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
Mar 04 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 Javascript
JS得到当前时间的方法示例
Mar 24 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
Aug 23 Javascript
vue--vuex详解
Apr 15 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 Javascript
vue 清空input标签 中file的值操作
Jul 21 Javascript
关于uniApp editor微信滑动问题
Jan 15 Javascript
Angularjs的键盘事件的绑定
Jul 27 #Javascript
Angularjs 事件指令详细整理
Jul 27 #Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
Jul 27 #Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 #Javascript
angular中实现li或者某个元素点击变色的两种方法
Jul 27 #Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
Jul 27 #Javascript
AngularJS点击添加样式、点击变色设置的实例代码
Jul 27 #Javascript
You might like
第一节--面向对象编程
2006/11/16 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
PHP的password_hash()使用实例
2014/03/17 PHP
img标签中onerror用法
2009/08/13 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
AngularJS基础 ng-src 指令简单示例
2016/08/03 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
python条件和循环的使用方法
2013/11/01 Python
python代码过长的换行方法
2018/07/19 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
Django实现单用户登录的方法示例
2019/03/28 Python
python正则-re的用法详解
2019/07/28 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
50道外企软件测试面试题
2014/08/18 面试题
酒吧创业计划书
2014/01/18 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
学校宣传标语
2014/06/18 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python