【问题标题】:Names of Objects properties vs Constructor function arguments in JavaScriptJavaScript 中对象属性的名称与构造函数参数的名称
【发布时间】:2018-11-14 22:47:46
【问题描述】:

首先,如果这个问题太基本或措辞不正确,我深表歉意。我正在学习 JavaScript,但我还是新手。我一直在试图找出一个包含在教科书中的例子,需要一些帮助。

这是一个例子:

var star = new Object;

function Star(constell, type, specclass, magnitude) {
  this.constellation = constell;
  this.type = type;
  this.spectralClass = specclass;
  this.mag = magnitude;
}

star["Polaris"] = new Star("Ursa Minor", "Double", "F7", 2.0);
alert(star["Polaris"].spectralClass);

我没有到达这里(并且似乎找不到解释)的部分是当我选择一个随机对象来提醒时,例如

alert(star["Polaris"].spectralClass);

我必须在函数中使用名称,即 spectralClass 而不是 specclass。这是为什么?如果我已经将它分配给spectralClass,为什么不直接使用specclass?我想我在这里遗漏了大量知识,但我似乎无法弄清楚它是什么。

谢谢!

【问题讨论】:

  • 请在上面的示例中将警报放在您希望它运行的位置;谢谢。
  • specclass 是构造函数内部的局部变量。 spectralClass 是构造函数公开的属性的名称。虽然我会非常警惕你的书所说的任何内容,如果它认真使用var star = new Object;而不是var star = {};
  • @NiettheDarkAbsol 考虑写一个答案?
  • @Niet the Dark Absol 它给出了这两个例子 var star = new Object;和 var 星 = {};作为创建新对象的一种方式。 :D 但是谢谢你指出来。谢谢你的解释,我开始明白了。是的,这绝对是问题的答案! :)
  • 是的,很公平,不知道为什么我在回答时评论了 XD 在下面发布了答案部分。

标签: javascript


【解决方案1】:

让我们进一步简化代码:

function Star(specclass) {
    this.spectralClass = specclass;
}

这里,Star 是一个构造函数。它有一个参数,可以通过函数内部的名称specclass 引用。

该函数将此参数值分配给名为spectralClass 的对象属性。

现在,

var polarisStar = new Star("F7");

polarisStarStar函数构造的对象,它已经将"F7"的值赋给了对象的spectralClass属性。所以你可以通过polarisStar.spectralClass访问它,例如

alert(polarisStar.spectralClass);

实际上,给构造函数的参数和构造对象的属性赋予相同的名称是一种常见的做法,即:

function Star(spectralClass) {
    this.spectralClass = spectralClass;
}

这使得代码更具可读性。

【讨论】:

  • 好的,哇!现在我懂了!非常感谢您的详细解释以及常见的做法。真的很感激!这使事情变得更容易和合乎逻辑。
  • @hemoglobin 我很高兴能帮上忙; @chazsolo 是的,当然,解决了这个问题,非常感谢你注意到这一点。
【解决方案2】:

specclass 是构造函数内部的局部变量。
spectralClass 是构造函数公开的属性的名称。

【讨论】:

    【解决方案3】:

    事实是:

    this.spectralClass
    

    在构造函数中使该变量可用于该对象实例...因此您可以在类中的其他函数中访问它。

    另一方面,

    specclass
    

    仅对构造函数是本地的。

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多