關(guān)于this
在視頻中實(shí)現(xiàn)鏈?zhǔn)絼赢嫊r,仍然采用多物體的形式,于是有如下代碼:
oli[i].onmouseover=function(){
fnmove(this,'width',200,function(){
fnmove(this,'height',300);});}
發(fā)現(xiàn)這樣寫實(shí)現(xiàn)不了鏈?zhǔn)叫Ч?,而改成如下代碼則可以;
oli[i].onmouseover=function(){
var othis=this;
fnmove(othis,'width',200,function(){
fnmove(othis,'height',300);});}
所以,想請問this到底應(yīng)該怎么用?在我的錯誤的代碼中第二個this(即標(biāo)為斜體的this)指向什么?謝謝!
2016-07-17
如果當(dāng)前執(zhí)行的是一個對象的方法,則執(zhí)行上下文就是這個方法所附屬的對象。
如果一個方法在執(zhí)行時沒有明確指定附屬對象,則這個方法的上下文為全局對象。
第一個this的對象是oli[i],但是第二個this并沒有明確指定附屬對象
就像下面的例子
2、用DOM方式在事件處理函數(shù)中使用this關(guān)鍵字
<div id="elmtDiv">division element</div> <script language="javascript"> var div = document.getElementById('elmtDiv'); div.attachEvent('onclick', EventHandler); function EventHandler() { ? ?// 在此使用this } </script>
這時的EventHandler()方法中的this關(guān)鍵字,指示的對象是IE的window對象。這是因?yàn)镋ventHandler只是一個普通的函數(shù),對于attachEvent后,腳本引擎對它的調(diào)用和div對象本身沒有任何的關(guān)系。同時你可以再看看EventHandler的caller屬性,它是等于null的。如果我們要在這個方法中獲得div對象引用,應(yīng)該使用:this.event.srcElement。?
3、用DHTML方式在事件處理函數(shù)中使用this關(guān)鍵字
?<div id="elmtDiv">division element</div> <script language="javascript"> var div = document.getElementById('elmtDiv'); div.onclick = function() { ? ?// 在此使用this }; </script>
這里的this關(guān)鍵字指示的內(nèi)容是div元素對象實(shí)例,在腳本中使用DHTML方式直接為div.onclick賦值一個EventHandler的方法,等于為div對象實(shí)例添加一個成員方法。這種方式和第一種方法的區(qū)別是,第一種方法是使用HTML方式,而這里是DHTML方式,后者腳本解析引擎不會再生成匿名方法。
有關(guān)this的用法,http://www.studyofnet.com/news/301.html