標籤:有一個 情況下 block 菜單 his 區別 use 調用 遍曆
javascript中,一個js中的函數,第一句var _this = this;為什麼要這樣做? 下面是源碼:
1 下面這段代碼是常用的網站首頁,自動切換span或者tabbar來變更List顯示內容的關鍵方法: 2 function scrollDoor(){ 3 } 4 scrollDoor.prototype = { 5 sd : function(menus,divs,openClass,closeClass){ 6 var _this = this; //大家看清楚了,在這裡,為什麼不直接用this,要用_this代替後面的所有this,這有什麼特殊的意義嗎?如果用了this會怎麼樣?一共2個問題哈! 7 if(menus.length != divs.length) 8 { 9 alert("菜單層數量和內容層數量不一樣!");10 return false;11 } 12 for(var i = 0 ; i < menus.length ; i++)13 { 14 _this.$(menus[i]).value = i; 15 _this.$(menus[i]).onmouseover = function(){16 17 for(var j = 0 ; j < menus.length ; j++)18 { 19 _this.$(menus[j]).className = closeClass;20 _this.$(divs[j]).style.display = "none";21 }22 _this.$(menus[this.value]).className = openClass; 23 _this.$(divs[this.value]).style.display = "block"; 24 }25 }26 },27 $ : function(oid){28 if(typeof(oid) == "string")29 return document.getElementById(oid);30 return oid;31 }32 }
問題一:不知道樓主有沒有接觸過jquery jquery裡邊有一個特別典型的例子能說明用_this的作用$("#btn").click(function(){ var _this = this;//這裡this和_this都代表了"#btn"這個對象 $(".tr").each(function(){ this;//在這裡this代表的是每個遍曆到的".tr"對象 _this;//仍代表"#btn"對象 })})這種情況就是在一個程式碼片段裡this有可能代表不同的對象,而編碼者希望_this代表最初的對象問題2:其實並沒有全部使用_this但是據我所看,應該沒有任何區別的,樓主的代碼裡用_this可能只是為了編碼規範吧
你給的例子給了我很好的啟發,因為JS可以多層嵌套代碼,可能下面還可以再嵌一個方法,引用this就會變成子方法控制的對象,如果需要上級的對像,在沒有參數的情況下,前面前提做了一個臨時變數_this,可以儲存上級對像,子方法中就可以用_this來調用了,這才是目的。 也許正如你所說的,我的那個方法中,後面並沒有再次嵌套子方法,那可能只是為了編碼規範。
javascript中,一個js中的函數,第一句var _this = this;為什麼要這樣做?