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

首頁(yè) > 編程 > JavaScript > 正文

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

2019-11-21 01:59:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
使用attachEvent對(duì)同一事件進(jìn)行多次綁定,這是解決事件函數(shù)定義沖突的重要方法。但是在IE中,函數(shù)內(nèi)的this指針并沒(méi)有指向被綁定元素,而是function對(duì)象,在應(yīng)用中,這是很難受的一件事,如果試圖用局部變量傳送元素,會(huì)因?yàn)殚]包而引起內(nèi)存泄漏。那么,我們應(yīng)該如何解決這一難題呢?

   我給Function添加了原型方法“bindNode”,在這個(gè)方法里,根據(jù)傳送過(guò)來(lái)的元素,進(jìn)行全局性存儲(chǔ)轉(zhuǎn)換,然后返回經(jīng)過(guò)封裝的函數(shù),使用call方法來(lái)進(jìn)行屬主轉(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

   //使用了全局?jǐn)?shù)組__bindNodes,通過(guò)局部變量iNodeItem進(jìn)行跨函數(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)過(guò)bindNode處理,下面的結(jié)果將是undefined
       alert(this.tagName)
   }.bindNode(bt))
   bt=null
}
</script>
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 海淀区| 东源县| 咸阳市| 阜宁县| 星子县| 旬邑县| 维西| 磐石市| 巫山县| 怀远县| 平阴县| 乌拉特后旗| 汶川县| 九寨沟县| 凭祥市| 浦城县| 通州区| 星子县| 蒲江县| 富蕴县| 崇义县| 曲水县| 绥滨县| 逊克县| 平顺县| 益阳市| 吉林市| 高清| 新竹县| 肥东县| 定南县| 兴化市| 寿阳县| 怀化市| 宁波市| 扶绥县| 马关县| 马关县| 安陆市| 普定县| 安溪县|