JavaScript中的对象属性名称与构造函数参数

时间:2018-11-14 14:30:10

标签: javascript

首先,对于这个问题太基础或措词不正确,我深表歉意。我正在学习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。这是为什么?如果已经将specclass分配给spectralClass,为什么不使用它呢?我想我在这里缺少很多知识,但是我似乎无法弄清楚它是什么。

谢谢!

3 个答案:

答案 0 :(得分:4)

让我们进一步简化代码:

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

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

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

现在,

var polarisStar = new Star("F7");

polarisStar是由Star函数构造的对象,该函数已将"F7"的值分配给该对象的spectralClass属性。因此,您可以通过polarisStar.spectralClass来访问它,例如

alert(polarisStar.spectralClass);

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

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

这使代码更具可读性。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

以下事实:

this.spectralClass

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

另一方面

specclass

仅在构造函数中本地。