【问题标题】:What type of JavaScript term/definition fits this?什么类型的 JavaScript 术语/定义适合这个?
【发布时间】:2019-05-27 20:51:08
【问题描述】:

我在阅读MDN documentation on JavaScript classes 时遇到了一个我不理解的赋值示例。有问题的行没有解释,因为该页面只是在解释其他内容(静态方法)。我对它的工作原理以及官方名称很着迷,以便我可以进一步研究它。

 class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
  static distance(a, b) {
    const dx = a.x - b.x;
    const dy = a.y - b.y;
    return Math.hypot(dx, dy);
  }
}

我不明白具体是a.xb.xa.yb.y。我不会考虑这种点表示法,因为点表示法被定义为 “在 JavaScript 中,可以使用点表示法访问属性...”。因此,如果这不是点表示法,那么分配给abxy 的值将适用什么术语?

字母 ab 不会排成一行 -

static distance(a, b)

技术上被称为“参数”,它被明确定义为属性以外的东西。而且由于它们是“参数”,所以“属性”这个词将不适用,因此点符号的官方定义不适用。

参数定义:参数是作为函数定义的一部分列出的变量

属性的定义:有一个值,可以写也可以不写

点符号的定义:在 JavaScript 中,可以使用点符号来访问属性...

【问题讨论】:

  • 那个点符号;例如,您正在访问a 上的x 属性。
  • 第二次确认:这是点符号。是什么让你不想这么想?
  • 第三个,是点符号。
  • 我明白了,我认为定义与此示例不匹配,但我想是的。
  • 我只是认为“a”和“b”不是属性,而是参数。这就是我问的原因。我从未见过 a.x 之前的任何东西设置的“a”参数或“b”参数等等。

标签: javascript methods


【解决方案1】:

这个问题是由于对对象实例化的工作原理以及如何在静态方法中引用该对象缺乏了解。 ab上线

static distance(a,b)

不是像我想的那样仅采用单个值的典型参数。他们实际上是在创建所述对象时接收完整的实例化对象引用。因此,a.x 的点表示法确实是对分配给对象内部名称或属性的值的“点表示法”引用。另外,我发现令人困惑的是如何

b.xb.y

在第一个对象实例化时尚未创建。显然,诸如静态方法之类的“辅助方法”以编程方式知道要等到所有参数都被填充后,该方法才能产生返回结果。它通过用对象填充所有参数来知道这一点。

【讨论】:

  • “不是像我想的那样简单地采用单个值的典型参数”——它们是。对象是单个值。此处的参数与任何其他函数的参数相同。
  • @Ry- 即使在上面的例子中,我也很清楚实例化的对象有 2 个属性,其中有 2 个值。那么怎么可能只有1个值传递给a的参数?我认为从语法上讲,这可以描述为总共有 3 个值,对象名称和与之关联的 2 个值。此外,我的回答确实证实了这是“点符号”,这是我从一开始就提出的具体问题。
  • 其他人的正确答案应该比这更深入,解决导致您首先相信它不是点符号的根本误解......除非没有人能够弄清楚这一点,因此 cmets。如果您的自我回答不包括这一点,那很好——它不应该包括一堆客观错误的东西,比如 ab 不是“典型参数”或者“ “知道等待”的辅助方法”根本存在。
  • “总共 3 个值,对象名称和与之关联的 2 个值”可能是在某些上下文中描述它的有用方式,但在“不是典型参数仅采用单个值”,这不是正确的区分。
  • @Ry- 我明白了,谢谢!我会努力更好地理解这个主题
猜你喜欢
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多