解决使用attachEvent函数时,this指向被绑定的元素的问题的方法

 更新时间:2007年08月13日 19:14:35   作者:  
使用attachEvent对同一事件进行多次绑定,这是解决事件函数定义冲突的重要方法。但是在IE中,函数内的this指针并没有指向被绑定元素,而是function对象,在应用中,这是很难受的一件事,如果试图用局部变量传送元素,会因为闭包而引起内存泄漏。那么,我们应该如何解决这一难题呢?

   我给Function添加了原型方法“bindNode”,在这个方法里,根据传送过来的元素,进行全局性存储转换,然后返回经过封装的函数,使用call方法来进行属主转换。



<html>
<body>
<button id=btTest>test</button>
</body>
</html>
<script>
if(!document.all){
   HTMLElement.prototype.attachEvent=function(sType,foo){
       this.addEventListener(sType.slice(2),foo,false)
   }
}
Function.prototype.bindNode=function(oNode){
   var foo=this,iNodeItem

   //使用了全局数组__bindNodes,通过局部变量iNodeItem进行跨函数传值,如果直接传送oNode,也将造成闭包
   if(window.__bindNodes==null)
       __bindNodes=[]
   __bindNodes.push(oNode)
   iNodeItem=__bindNodes.length-1
   oNode=null
   return function(e){
       foo.call(__bindNodes[iNodeItem],e||event)
   }
}
abc()
function abc(){
   var bt=document.getElementById("btTest")
   bt.attachEvent("onclick",function(){

       //如果不经过bindNode处理,下面的结果将是undefined
       alert(this.tagName)
   }.bindNode(bt))
   bt=null
}
</script>

相关文章

  • js 分页全选或反选标识实现代码

    js 分页全选或反选标识实现代码

    分页全选或反选标识 对多选按钮操作。 批量全选添加、批量移除。 行单选添加、移除。 分页之后(全选或不选)状态标识依然存在
    2011-08-08
  • Js调用Java方法并互相传参的简单实例

    Js调用Java方法并互相传参的简单实例

    下面小编就为大家带来一篇Js调用Java方法并互相传参的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • 微信小程序云开发如何使用云函数生成二维码

    微信小程序云开发如何使用云函数生成二维码

    这篇文章主要为大家详细介绍了微信小程序云开发如何使用云函数生成二维码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 利用不到200行代码写一款属于你自己的js类库

    利用不到200行代码写一款属于你自己的js类库

    这篇文章主要给大家介绍了如何利用不到200行代码写一款属于你自己的js类库,文中通过示例代码介绍的非常详细,对大家学习或者使用js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • javascript中判断json的方法总结

    javascript中判断json的方法总结

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的API或工具包,接下来跟着小编学习js中判断json的方法吧
    2015-08-08
  • 微信小程序实现文字滚动

    微信小程序实现文字滚动

    这篇文章主要为大家详细介绍了微信小程序实现文字滚动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • three.js搭建室内场景教程

    three.js搭建室内场景教程

    这篇文章主要为大家详细介绍了three.js搭建室内场景教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • js实现类选择器和name属性选择器的示例步骤

    js实现类选择器和name属性选择器的示例步骤

    这篇文章主要介绍了js实现类选择器和name属性选择器的示例步骤,帮助大家更好的理解和使用js,感兴趣的朋友可以了解下
    2021-02-02
  • js 去掉空格实例 Trim() LTrim() RTrim()

    js 去掉空格实例 Trim() LTrim() RTrim()

    js 去掉空格实例Trim(),LTrim(),RTrim() 需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JavaScript枚举选择jquery插件代码实例

    JavaScript枚举选择jquery插件代码实例

    这篇文章主要介绍了JavaScript枚举选择jquery插件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论