編寫JavaScript時,有時候會將對象this
的引用存儲在局部變量中以用於不同目的(設置合適範圍,以幫助編碼混淆器等)。有些編碼者傾向於使用別名this
到that
來使其明顯表達其意圖。其他人使用self
,因爲它指向對象本身。我甚至看到源代碼me
舉行參考,它仍然是有道理的。當然還有其他的。that,self or me - 哪一個更喜歡JavaScript?
我應該選擇哪一個?有沒有一個使用的慣例,或者它只是味道的問題。
編寫JavaScript時,有時候會將對象this
的引用存儲在局部變量中以用於不同目的(設置合適範圍,以幫助編碼混淆器等)。有些編碼者傾向於使用別名this
到that
來使其明顯表達其意圖。其他人使用self
,因爲它指向對象本身。我甚至看到源代碼me
舉行參考,它仍然是有道理的。當然還有其他的。that,self or me - 哪一個更喜歡JavaScript?
我應該選擇哪一個?有沒有一個使用的慣例,或者它只是味道的問題。
我個人使用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太容易讓錯誤滑落,所以你不再想這麼做了。
另一個不幸是在分配給'self'時遺忘'var'。 IE *討厭*這個。 – 2010-04-23 13:43:28
是的,很好的舊IE瀏覽器及其分配給窗口屬性的樂趣。儘管如此,至少它會拋出一個錯誤,讓你知道你做了一個壞習慣。即使錯誤消息是絕望的誤導。 – bobince 2010-04-23 13:45:50
在你的蘋果籃裏有一個桔子,this
有一個非常具體的語境意義。這些選項之間的選擇實際上是self
和me
之間。在你選擇的那些之間,無論哪種方式只有個人喜好都沒有關係。
this
指的是你的上下文,所以它不是一個真正的「選項」,不會引入大量的混淆,容易出錯。我看到self
使用遠遠多於me
(在示例代碼,框架,庫等)。這只是偏好,但我同意self
更具吸引力,不知道爲什麼......再次只是我的偏好。
我喜歡'我'因爲它少了兩個字母來輸入...但只要你*一致*就沒關係。 – 2010-04-23 13:28:07
@codeka - 偉大的一點,一致性*遠遠*比在這裏選擇名稱更重要 – 2010-04-23 13:29:21
同意一致點。這可能只是選擇背叛了程序員對其他語言的體驗。 'self'是Delphi的'this'版本,'''是VB的版本。據我所知,這個''不是用於任何其他語言。 – 2010-04-23 13:41:08
親自爲此,我試圖讓變量的含義比「稍後我需要的東西」更多一點。通常情況下,你需要這些臨時變量纔會變得有些粗糙;可能會有兩層或更多層的臨時this
擋板來跟蹤。
因此,例如在一個jQuery的設置,我可能會使用一些需要注意的元素類型,一個臨時this
藏匿應持有:
$('form').each(function() {
var $form = $(this);
$form.find('input:checkbox').each(function() {
var $checkbox = $(this);
// ...
});
});
的變量使用「$」前綴是一個很好的方式以跟蹤對象是否已被「jQuery化」:-)
請注意,編程背景似乎是一個主要的(主要的?)因素 - 那些使用(d)Smalltalk或Python,或學習從那些使用它們的人中,傾向於使用「自我」。 – outis 2010-04-23 14:05:23