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的继承的封装介绍
Oct 15 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
Dec 23 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
Nov 23 Javascript
基于jQuery日历插件制作日历
Mar 11 Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
Jan 10 Javascript
AngularJS学习第二篇 AngularJS依赖注入
Feb 13 Javascript
js实现音频控制进度条功能
Apr 01 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
May 03 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
在angularJs中进行数据遍历的2种方法
Oct 08 Javascript
vue使用nprogress实现进度条
Dec 09 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 网上商城促销设计实例代码
2012/02/17 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
2019/10/12 Python
使用python实现对元素的长截图功能
2019/11/14 Python
详解python内置模块urllib
2020/09/09 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
应届毕业生应聘自荐信
2013/12/07 职场文书
创业计划书中要认真思考的问题
2013/12/28 职场文书
群众路线批评与自我批评
2014/02/06 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
一个都不能少观后感
2015/06/04 职场文书
关于五一放假的通知
2015/08/18 职场文书