四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

解決使用attachEvent函數(shù)時,this指向被綁定的元素的問題的方法

使用attachEvent對同一事件進行多次綁定,這是解決事件函數(shù)定義沖突的重要方法。但是在IE中,函數(shù)內(nèi)的this指針并沒有指向被綁定元素,而是function對象,在應(yīng)用中,這是很難受的一件事,如果試圖用局部變量傳送元素,會因為閉包而引起內(nèi)存泄漏。那么,我們應(yīng)該如何解決這一難題呢?

   我給Function添加了原型方法“bindNode”,在這個方法里,根據(jù)傳送過來的元素,進行全局性存儲轉(zhuǎn)換,然后返回經(jīng)過封裝的函數(shù),使用call方法來進行屬主轉(zhuǎn)換。



<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

   //使用了全局數(shù)組__bindNodes,通過局部變量iNodeItem進行跨函數(shù)傳值,如果直接傳送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(){

       //如果不經(jīng)過bindNode處理,下面的結(jié)果將是undefined
       alert(this.tagName)
   }.bindNode(bt))
   bt=null
}
</script>

JavaScript技術(shù)解決使用attachEvent函數(shù)時,this指向被綁定的元素的問題的方法,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 妈妈的花样年华演员表全部| 楼下的女邻居| 乔治桑| 豪勇七蛟龙电影在线观看免费完整版| 范冰冰激情片段| 爱情面包房| 仁爱版九年级英语上册教案| 境界千年血战篇| 所求皆所愿| 惊悚电影| 容易失禁的女仆桃乃木香奈| 好好说话电视剧免费观看完整版40集 | 电锯狂魔| 梵缺| 风之谷钢琴谱| 宝宝乐园| 好好说再见| cctv体育频道5| 散文诗二首批注| 光棍电影| 人民日报评墨茶| karina hart| 暗黑破坏神2毁灭之王| 玫瑰故事演员表| 婚后三十年电视剧剧情介绍| 三夫 电影| 小娘惹第二部电视剧免费观看| 小娥| 港股三大指数| 健步如飞的蜗牛三年级作文| 周秀娜与罗仲谦新婚吻戏合集| 凌晨晚餐| 韩国一级黄色| 圣斗士星矢在线观看| 女怕嫁错郎演员表| 夜电影| 危险性游戏在线观看| 浙江卫视全天节目表| 密探| 红海行动2虎鲸行动电影在线观看| 狗叫声吸引狗|