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 判断浏览器类型及版本
Feb 21 Javascript
Google Map API更新实现用户自定义标注坐标
Jul 29 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
Aug 21 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
Mar 28 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
vue实现商城上货组件简易版
Nov 27 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
vue.js或js实现中文A-Z排序的方法
Mar 08 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
Sep 27 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
PHP入门
2006/10/09 PHP
PHP的单引号和双引号 字符串效率
2009/05/27 PHP
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
ajax在joomla中的原生态应用代码
2012/07/19 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
php实现数据库的增删改查
2017/02/26 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
Google 静态地图API实现代码
2010/11/19 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
浅谈js的异步执行
2016/10/18 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
浅析Python 中整型对象存储的位置
2016/05/16 Python
python获取list下标及其值的简单方法
2016/09/12 Python
Python中字符串的修改及传参详解
2016/11/30 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
django将数组传递给前台模板的方法
2019/08/06 Python
Python和Sublime整合过程图示
2019/12/25 Python
python dumps和loads区别详解
2020/02/04 Python
Python日志syslog使用原理详解
2020/02/18 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
如何利用python发送邮件
2020/09/26 Python
超市采购员岗位职责
2014/02/01 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
环保建议书600字
2014/05/14 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis