ホームページ >ウェブフロントエンド >jsチュートリアル >attachEvent関数_javascriptスキルを使用するときにthisがバインドされた要素を指している問題を解決する方法

attachEvent関数_javascriptスキルを使用するときにthisがバインドされた要素を指している問題を解決する方法

WBOY
WBOYオリジナル
2016-05-16 19:10:461253ブラウズ

AttachEvent を使用して同じイベントを複数回バインドすることは、競合するイベント関数定義を解決する重要な方法です。ただし、IE では、関数内の this ポインターはバインドされた要素ではなく、関数オブジェクトを指しています。これは、要素を転送するためにローカル変数を使用しようとすると、非常に不快なことになります。メモリリーク。では、この問題をどのように解決すればよいでしょうか?

Functionにプロトタイプメソッド「bindNode」を追加しました。このメソッドでは、渡された要素に基づいてグローバルストレージ変換が実行され、カプセル化された関数が返され、callメソッドを使用してオーナー変換が実行されます。 。








<script> <BR>if(!document.all){ <BR> HTMLElement.prototype.attachEvent=function(sType,foo){ <BR> this.addEventListener(sType.slice(2),foo,false) <BR> } <BR>} <BR>Function.prototype.bindNode=function(oNode){ <BR> var foo=this,iNodeItem <br><br> //使用了全局数组__bindNodes,通过局部变量iNodeItem进行跨函数传值,如果直接传送oNode,也将造成闭包 <BR> if(window.__bindNodes==null) <BR> __bindNodes=[] <BR> __bindNodes.push(oNode) <BR> iNodeItem=__bindNodes.length-1 <BR> oNode=null <BR> return function(e){ <BR> foo.call(__bindNodes[iNodeItem],e||event) <BR> } <BR>} <BR>abc() <BR>function abc(){ <BR> var bt=document.getElementById("btTest") <BR> bt.attachEvent("onclick",function(){ <br><br> //如果不经过bindNode处理,下面的结果将是undefined <BR> alert(this.tagName) <BR> }.bindNode(bt)) <BR> bt=null <BR>} <BR></script>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。