JS类字段

Spe*_*rds 2 javascript class ecmascript-6

对于ES6类,我们有getter和setter属性,但没有字段选项(或者至少我知道).

使用Object.defineProperty,您可以使用value属性设置它们.如果有的话,你如何对课程做同样的事情?

我知道它可以在类构造函数中完成,但是如果可能的话我希望它是分开的.

lon*_*day 7

你说上面"无论语言如何,它们都是一样的".

嗯,是的,不.

是的,编程语言之间存在明显的关系,但Javascript/ECMAScript有一些不同寻常的特性.不要只是期望概念准确翻译.

关键是Javascript不是基于类的,即使它没有类似类的语法.它是基于原型的.这意味着您可以在任何对象上声明任何属性.您不需要将其包含在类声明中.

因此,"课程领域"未包含在ES6标准中.预计您会将它们包含在constructor方法中,这在ES6之前的Javascript中是正常的.

有建议创建公共类字段.这些看起来像这样:

class Dog {
  constructor(name) {
    this.name = name;
  }
  bark() {
    console.log('woof');
  }
  tail = new Tail()
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用如下代码:

let benji = new Dog('Benji');
let rover = new Dog('Rover');
console.log(benji.bark === rover.bark); // true
console.log(benji.tail === rover.tail); // false
Run Code Online (Sandbox Code Playgroud)

关键是每个"实例"都有相同的方法.但是,每个"实例"都具有不同的属性.这就是解释为什么最初不包含此语法的区别.

作为提案,目前不支持此功能.但是,它可以使用蒸腾来使用.Babel.js(在我写的时候,第2阶段的预设将以上代码转换成:

class Dog {
  constructor(name) {
    this.tail = new Tail();

    this.name = name;
  }
  bark() {
    console.log('woof');
  }
}
Run Code Online (Sandbox Code Playgroud)