在编写 JavaScript 代码时,有时您会将对象的引用 this
存储在本地变量中,以便于不同的目的(设置适当的作用域,帮助代码混淆器等)。有些程序员喜欢给 this
取别名为 that
,以使其意图明显。另外一些人使用 self
,因为它指向对象本身。我甚至看到过源代码中使用 me
来保存引用,并且仍然很有意义。当然还有其他方式。
我应该选择哪一个?是否有规定要使用哪种方法,还是只是品味问题?
在编写 JavaScript 代码时,有时您会将对象的引用 this
存储在本地变量中,以便于不同的目的(设置适当的作用域,帮助代码混淆器等)。有些程序员喜欢给 this
取别名为 that
,以使其意图明显。另外一些人使用 self
,因为它指向对象本身。我甚至看到过源代码中使用 me
来保存引用,并且仍然很有意义。当然还有其他方式。
我应该选择哪一个?是否有规定要使用哪种方法,还是只是品味问题?
个人而言,我使用that
,但任何其他清晰易懂的名称都可以。
我不会使用self
,因为全局变量/window
属性self
已经存在作为对window
的引用。虽然它完全没用(所以没有人会在意你遮蔽它),但它略微增加了忽视愚蠢错误的风险:
var se1f= this; // misspelled (perniciously). or maybe you just forgot to write line
onclick= function() {
self.foo= 1; // whoops, just wrote to `window`!
};
相比之下:
var that= this;
onclick= function() {
that.foo= 1; // error thrown
};
虽然稍微有些牵强,但由于 JavaScript 允许错误存在的宽松性,你不想让它变得更加松散。
self
赋值时忘记使用var
。IE非常讨厌这种情况。 - Crescent Fresh你的苹果篮子里有一个橙子,this
在这里有一个非常具体的上下文含义。在这两个选项中,真正的选择是在 self
和 me
之间。在这两者之间......你可以选择,无论哪种方式都没有关系,只是个人喜好。
this
指的是你所处的上下文,因此如果不引入大量混淆和易于出错的情况,它不是一个“选项”。我看到 self
的使用比 me
更多(例如代码示例、框架、库等)。这只是个人偏好,但我同意 self
更有吸引力,不确定为什么......再次强调,这只是我的个人偏好。
me
,因为少打两个字母... 但只要保持一致性,实际上并不重要。 - Dean Hardingself
是 Delphi 版本的 this
,而 me
则是 VB 的版本。据我所知,that
在任何其他语言中都没有被使用过。 - MikeJ-UKthis
是什么意思,我问的是self
、me
和**that
**。 - viam0Zahthat
,至少对于习惯英语的人来说,这会更加令人困惑(因为它在编程以外的自动关联)。如果你的母语不是英语,那么 this
和 that
之间的关联就不会干扰,也不会那么令人困惑。 - Nick Craver个人而言,我正在努力让变量的含义更加具体化,而不仅仅是“我以后需要的那个东西”。在某些比较复杂的情况下,你可能需要这些临时变量;可能会有两层或更多层的临时 this
堆栈需要跟踪。
因此,例如在 jQuery 设置中,我可能会使用一些东西来记录一个临时 this
堆栈应该保存的元素类型:
$('form').each(function() {
var $form = $(this);
$form.find('input:checkbox').each(function() {
var $checkbox = $(this);
// ...
});
});