Spe*_*rds 2 javascript class ecmascript-6
对于ES6类,我们有getter和setter属性,但没有字段选项(或者至少我知道).
使用Object.defineProperty,您可以使用value属性设置它们.如果有的话,你如何对课程做同样的事情?
我知道它可以在类构造函数中完成,但是如果可能的话我希望它是分开的.
你说上面"无论语言如何,它们都是一样的".
嗯,是的,不.
是的,编程语言之间存在明显的关系,但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)