Javascript JS类字段
对于ES6类,我们有getter和setter属性,但没有字段选项(至少我知道) 使用Javascript JS类字段,javascript,class,ecmascript-6,class-fields,Javascript,Class,Ecmascript 6,Class Fields,对于ES6类,我们有getter和setter属性,但没有字段选项(至少我知道) 使用Object.defineProperty,您可以使用值属性设置它们。如果有的话,你如何在课堂上做同样的事情 我知道它可以在类构造函数中完成,但如果可能的话,我希望它是独立的。您在上面说过“无论使用何种语言,它们都是相同的东西” 嗯,是和否 是的,编程语言之间有着明显的联系,但是Javascript/ECMAScript有一些不寻常的特性。不要只是期望概念能够准确地翻译 关键是Javascript不是基于类的,
Object.defineProperty
,您可以使用值
属性设置它们。如果有的话,你如何在课堂上做同样的事情
我知道它可以在类构造函数中完成,但如果可能的话,我希望它是独立的。您在上面说过“无论使用何种语言,它们都是相同的东西”
嗯,是和否
是的,编程语言之间有着明显的联系,但是Javascript/ECMAScript有一些不寻常的特性。不要只是期望概念能够准确地翻译
关键是Javascript不是基于类的,即使它没有类语法。它是基于原型的。这意味着您可以在任何对象上声明任何属性。您不需要在类声明中包含它
因此,ES6标准中不包括“类字段”。我们希望您将它们包括在构造函数中
方法中,这在ES6之前的Javascript中是正常的
有一个提议要创建。这些看起来像这样:
class Dog {
constructor(name) {
this.name = name;
}
bark() {
console.log('woof');
}
tail = new Tail()
}
let benji = new Dog('Benji');
let rover = new Dog('Rover');
console.log(benji.bark === rover.bark); // true
console.log(benji.tail === rover.tail); // false
然后,您可以得到如下代码:
class Dog {
constructor(name) {
this.name = name;
}
bark() {
console.log('woof');
}
tail = new Tail()
}
let benji = new Dog('Benji');
let rover = new Dog('Rover');
console.log(benji.bark === rover.bark); // true
console.log(benji.tail === rover.tail); // false
关键是每个“实例”都有相同的方法。但是,每个“实例”都有不同的属性。这就是为什么最初没有包含此语法的原因
作为一项提案,目前不支持该提案。然而,它可以使用透明法。Babel.js(在我写这篇文章时,使用Stage 2预设将上述代码转换为:
class Dog {
constructor(name) {
this.tail = new Tail();
this.name = name;
}
bark() {
console.log('woof');
}
}
现在是第3阶段ECMAScript提案,并且在当前版本的Chrome和Node.js 12中已经得到支持。提案还引用了
我不明白这个问题。你能举个例子说明“它可以在类构造函数中完成”这样我们就可以看到你在寻找什么吗?@lonesomeday在类构造函数中,
this.whather='someValue';
那么你指的是对象属性?“类字段”不是JS中存在的一个概念。是的……它们是相同的,无论使用何种语言。@LoneSomeday实例属性的初始化应该在构造函数中完成。您认为这有什么错?为什么要“单独”完成?您传输的代码中的名称
从何而来?@Bergi是我原始代码的稍晚版本。现在已更正。谢谢。更明显的是,类字段是多么毫无意义:-)@Bergi这是近似的目标!