国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

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

2024-09-06 12:41:51
字體:
來源:轉載
供稿:網友
使用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>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁强县| 苏州市| 桐柏县| 丘北县| 台南县| 许昌市| 望奎县| 奇台县| 基隆市| 河间市| 宁陵县| 蕲春县| 镇康县| 澜沧| 蒙城县| 汉寿县| 宿州市| 太谷县| 双江| 萝北县| 托克逊县| 河池市| 农安县| 资溪县| 贺州市| 镇安县| 元谋县| 阳曲县| 卓尼县| 阿鲁科尔沁旗| 雅江县| 阜城县| 日喀则市| 石林| 巴东县| 当雄县| 庄浪县| 涞水县| 巩义市| 竹溪县| 来宾市|