2010-04-23 22 views
18

編寫JavaScript時,有時候會將對象this的引用存儲在局部變量中以用於不同目的(設置合適範圍,以幫助編碼混淆器等)。有些編碼者傾向於使用別名thisthat來使其明顯表達其意圖。其他人使用self,因爲它指向對象本身。我甚至看到源代碼me舉行參考,它仍然是有道理的。當然還有其他的。that,self or me - 哪一個更喜歡JavaScript?

我應該選擇哪一個?有沒有一個使用的慣例,或者它只是味道的問題。

+1

請注意,編程背景似乎是一個主要的(主要的?)因素 - 那些使用(d)Smalltalk或Python,或學習從那些使用它們的人中,傾向於使用「自我」。 – outis 2010-04-23 14:05:23

回答

42

我個人使用that,但其他清楚的事情都很好。

我不會使用self,因爲已存在全局變量/ window -property self作爲參考window。雖然這是完全無用的(所以沒有人很可能會關心你遮蔽它),它略微增加會愚蠢錯誤的風險未注意到:

var se1f= this;   // mis-spelled (perniciously). or maybe you just forgot to write line 
onclick= function() { 
    self.foo= 1;  // whoops, just wrote to `window`! 
}; 

而:

var thot= this; 
onclick= function() { 
    that.foo= 1;  // error thrown 
}; 

稍微做了些設計,但是JavaScript太容易讓錯誤滑落,所以你不再想這麼做了。

+0

另一個不幸是在分配給'self'時遺忘'var'。 IE *討厭*這個。 – 2010-04-23 13:43:28

+0

是的,很好的舊IE瀏覽器及其分配給窗口屬性的樂趣。儘管如此,至少它會拋出一個錯誤,讓你知道你做了一個壞習慣。即使錯誤消息是絕望的誤導。 – bobince 2010-04-23 13:45:50

2

在你的蘋果籃裏有一個桔子,this有一個非常具體的語境意義。這些選項之間的選擇實際上是selfme之間。在你選擇的那些之間,無論哪種方式只有個人喜好都沒有關係。

this指的是你的上下文,所以它不是一個真正的「選項」,不會引入大量的混淆,容易出錯。我看到self使用遠遠多於me(在示例代碼,框架,庫等)。這只是偏好,但我同意self更具吸引力,不知道爲什麼......再次只是我的偏好。

+2

我喜歡'我'因爲它少了兩個字母來輸入...但只要你*一致*就沒關係。 – 2010-04-23 13:28:07

+2

@codeka - 偉大的一點,一致性*遠遠*比在這裏選擇名稱更重要 – 2010-04-23 13:29:21

+2

同意一致點。這可能只是選擇背叛了程序員對其他語言的體驗。 'self'是Delphi的'this'版本,'''是VB的版本。據我所知,這個''不是用於任何其他語言。 – 2010-04-23 13:41:08

1

親自爲此,我試圖讓變量的含義比「稍後我需要的東西」更多一點。通常情況下,你需要這些臨時變量纔會變得有些粗糙;可能會有兩層或更多層的臨時this擋板來跟蹤。

因此,例如在一個jQuery的設置,我可能會使用一些需要注意的元素類型,一個臨時this藏匿應持有:

$('form').each(function() { 
    var $form = $(this); 
    $form.find('input:checkbox').each(function() { 
    var $checkbox = $(this); 
    // ... 
    }); 
}); 

的變量使用「$」前綴是一個很好的方式以跟蹤對象是否已被「jQuery化」:-)