那个,自我还是我 - 在JavaScript中更喜欢哪一个?

问题描述 投票:19回答:3

在编写JavaScript时,有时您会将对象this的引用存储在本地变量中以用于不同目的(设置适当的范围,帮助编写混淆器等)。有些编码员喜欢将this混淆到that,以明确其意图。其他人使用self,因为它指向对象本身。我甚至看到me持有参考的源代码,它仍然有意义。当然还有其他的。

我应该选择哪一个?是否有使用的惯例或仅仅是品味的问题。

javascript naming-conventions this
3个回答
44
投票

我个人使用that,但其他一切都很清楚。

我不会使用self,因为全局变量/ window-property 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如此邋with,让错误滑落,你真的不想再这么做了。


2
投票

你的苹果篮子里有一个橙子,this有一个非常具体的背景意义。选择真正在selfme这些选项之间。在那些......你选择之间,无论哪种方式都只是个人偏好。

this指的是你的上下文,所以它并不是一个“选项”,如果不引入很多混淆并容易出错。我看到selfme使用的更多(在示例代码,框架,库等)。这只是偏好,但我同意self更有吸引力,不知道为什么......再次只是我的偏好。


1
投票

个人而言,我正在努力使变量意味着比“我以后需要的东西”更多的东西。通常你需要那些临时变量,在有点粗糙的情况下;可能有两层或更多层的临时this stashes来跟踪。

因此,例如在jQuery设置中,我可能会使用一些东西来记录临时this存储应该包含的元素类型:

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

在变量上使用“$”前缀是一种很好的方法来跟踪对象是否已经“jQuery-ized”:-)

© www.soinside.com 2019 - 2024. All rights reserved.