【问题标题】:Best approach to avoid naming collisions in object with javascript [duplicate]避免使用javascript在对象中命名冲突的最佳方法[重复]
【发布时间】:2020-08-02 05:16:17
【问题描述】:

假设我有一个带有 getter 和 setter 的对象。

const obj = {
  a: 0,
  get a(){
    return this.a;
  }
}

我会收到错误Maximum call stack size exceeded at Object.get a [as a]。我可以将 a 变量命名为不同的名称,但一段时间后它会变得混乱。

我可以在它前面加上下划线或类似的东西:

const obj = {
  _a: 0,
  get a(){
    return this._a;
  }
}

我想知道是否有处理此问题的行业标准?使用下划线不是正确的方法,因为它们象征着其他事物吗?处理此问题的推荐方法是什么,或者它是由开发人员决定的事情之一?

我只是不想走上错误的道路,也无法真正找到关于此事的明确答案。

谢谢。

【问题讨论】:

  • 您试图通过使用 getter 来解决什么问题?这些属性无论如何都不是私有的,任何人都可以直接obj.a
  • 首先想到的是数据验证。即使可以使用底层变量,您也不应该使用,这通常是关于类/组件的文档的一部分。无论成员访问器功能如何,Getter/setter 都非常出色。
  • @ajobi 这只是为了便于演示我正在创建一个系统来监听变量的变化。
  • AFAIK,不。没有办法将 setter 和 getter 命名为与您的属性相同的名称。
  • @RashadKokash 我显然知道我不能给他们起同样的名字。这就是问题的全部原因。

标签: javascript


【解决方案1】:

您的第一个示例不起作用,因为名为 agetter 最终将成为您对象的唯一属性。当您调用 this.a 时,您实际上是在再次调用 getter,因此您最终会遇到 stackoverflow。

使用_ 作为底层变量的前缀非常好。这实际上与其他语言一致。

【讨论】:

  • 你是否认为下划线有点误导,因为它通常表示私有变量或函数。
  • 好吧,如果您声明 getter/setter,您希望它不会被直接访问,这在某种程度上希望它是私有的。
猜你喜欢
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 2017-05-01
  • 1970-01-01
  • 2015-02-05
  • 2017-05-24
  • 1970-01-01
相关资源
最近更新 更多