首页 > 解决方案 > 是否需要在类构造函数中声明所有成员

问题描述

以下两个类声明本质上是否相同?

class ColorSpectrum
{
    constructor(min, max)
    {
        this.Min = min;
        this.Max = max;
        //this.Colors = []; edited
        this.Colors;
    }

    SetColors(colors)
    {
        this.Colors = colors;
    }
}

对比

class ColorSpectrum
{
    constructor(min, max)
    {
        this.Min = min;
        this.Max = max;
    }

    SetColors(colors)
    {
        this.Colors = colors;
    }
}

如果我理解正确,在这两种情况下,Colors如果undefined没有SetColorsColorSpectrum.

从更广泛的意义上说,我是否需要在构造函数中明确声明我的类的所有成员,或者它们可以在不同的成员中“动态”定义(例如SetColors在我上面的示例中)?

标签: javascript

解决方案


如果我理解正确,如果在 ColorSpectrum 的实例中没有调用 SetColors,那么在这两种情况下,颜色都将是未定义的。

让我们检查。

class ColorSpectrum {
  constructor(min, max) {
    this.Min = min;
    this.Max = max;
    this.Colors = [];
  }

  SetColors(colors) {
    this.Colors = colors;
  }
}

class ColorSpectrum2 {
  constructor(min, max) {
    this.Min = min;
    this.Max = max;
  }

  SetColors(colors) {
    this.Colors = colors;
  }
}

const spectrum1 = new ColorSpectrum(0, 1);
const spectrum2 = new ColorSpectrum2(0, 1);

console.log(spectrum1.Colors);
console.log(spectrum2.Colors);

没有。

顺便说一句,这是大写类名的常见约定,但小写的属性和方法。所以:class ColorSpectrum, 但是this.min, this.max, setColors.


推荐阅读