可以'属性'或者'字段'在javascript

时间:2018-01-25 15:07:48

标签: javascript class

我来自C#背景,我们有fieldsproperties

JavaScript支持课程,我正在学习它们,但立即遇到了障碍。

以下代码段工作正常,但我的问题是关于2"字段" massmoons。 JavaScript正在创建这些对象,但我想知道它们是否可以显式创建。

class Planet {

      constructor (mass, moons) {
        this.mass  = mass;
        this.moons = moons || 0;
      }

      reportMoons () {
        txt.innerHTML = "I have " + this.moons + " moons.";
      }
}

代码source

所以不知何故(我相信因为变量没有被定义,它应该自动成为一个全局变量但是因为它是一个类的一部分我怀疑它没有做那两个,JavaScript都知道massmoons。我宁愿看到明确声明的这些变量(正如我在C#中所说的那样),但我无法在类中添加varconstlet。以下内容无效

class Planet {  

   constructor (mass, moons) {
   }

   let _mass;
   const _val = 5;
}

原因是我认为查找定义的属性更容易,而不必查看构造函数(可能是因为我已经习惯了C#)。

我知道JavaScript不是C#但是......是否有可能让它更加冗长?

PS。我已经使用TypeScript了。我不是在建议哪种语言更适合我,而是热衷于学习JavaScript及其奇怪而奇妙的方法:)

2 个答案:

答案 0 :(得分:1)

我不知道纯JS是否有可能。但你可以看看TypeScript。 它为JS添加了一些功能并将其转换为纯js。 你可以:

  • 输入了变量
  • 指定退货类型
  • 有枚举和界面

等等。

答案 1 :(得分:0)

更新:对不起抽象示例(汽车),我也可以使用你的例子,但你会明白这一点

你可以使用吸气剂

class Car {

    /**
     * static getter, can be accessed by typing Car.defaultProperties
     */
    static get defaultProperties() {
        return {
            seats: 2
        };
    }

    /**
     * prototype getter, can be called by typing this.seats or from outside...
     */
    get seats() {
        return this.properties.seats;
    }

    constructor(seats) {
        this.properties = Car.defaultProperties;
        this.properties.seats = seats;
    }

}