【问题标题】:that, self or me — which one to prefer in JavaScript?那,self 或 me — 在 JavaScript 中更喜欢哪一个?
【发布时间】:2010-04-23 13:19:43
【问题描述】:

在编写 JavaScript 代码时,有时您将对象 this 的引用存储在一个局部变量中以用于不同目的(设置适当的范围、帮助编码混淆器等)。有些编码人员更喜欢将 this 别名为 that 以使其意图显而易见。其他人使用self,因为它指向对象本身。我什至看到me 持有引用的源代码,它仍然有意义。当然还有其他的。

我应该更喜欢哪一个?是否有使用惯例,或者只是口味问题。

【问题讨论】:

  • 请注意,编程背景似乎是一个主要(主要?)因素——那些使用(d)Smalltalk 或 Python,或从使用它们的人那里学习的人,倾向于使用“自我”。

标签: javascript naming-conventions this


【解决方案1】:

我个人使用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 太草率了,让错误滑动你真的不想再这样了。

【讨论】:

  • 另一个意外是在分配给self 时忘记了var。 IE讨厌这个。
  • 是的,好的旧 IE 及其分配给窗口属性的乐趣。尽管如此,至少它会抛出一个错误,让你知道你做了坏事。即使错误消息是无可救药的误导。
【解决方案2】:

你的苹果篮里有一个橙子,this 有一个非常具体的上下文含义。选择实际上是在这些选项的selfme 之间。在这些之间......您选择,无论哪种方式都无关紧要,只是个人喜好。

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

【讨论】:

  • 我喜欢me,因为它少了两个要输入的字母……但只要你一致,这真的没关系。
  • @codeka - 很好,一致性比这里的名称选择更重要
  • 同意一致性点。可能只是选择出卖了程序员对其他语言的经验。 self 是 Delphi 的 this 版本,me 是 VB 的版本。据我所知,that 没有用于任何其他语言。
  • 我知道this 是什么意思。我问了selfmethat
  • @Török - 我在编辑标题之前发布了 :) 我会避开 that,至少对于习惯于英语的人来说,它会更加混乱(由于编程之外的自动关联) .如果您的母语不是英语,那么 thisthat 之间的关联不会干扰,也不会那么混乱。
【解决方案3】:

嗯,就我个人而言,我正在努力使变量更有意义,而不是“我以后需要的东西”。通常,在有些棘手的情况下,您需要这些临时变量;可能有两层或更多层的临时this stashes 需要跟踪。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 2010-09-16
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多