是否可以使用ECMAScript6class
表示法声明静态类变量或实例变量的默认值?没有class
我的想法会写成
function MyClass(arg) { if(arg) this.arg = arg; }
MyClass.classVariable = 42;
MyClass.prototype.arg = "no arg specified";
我认为,最明显的类似ES6的表示法是
class MyClass {
constructor(arg) { if(arg) this.arg = arg; }
static let classVariable = 42;
let arg = "no arg specified";
}
但这是行不通的,因为根据当前的规范草案,ClassElement的唯一产生是静态的,实例方法和分号都是它们自己的。好的,可以使用一对getter和setter方法来实现与我概述的语义类似的语义,但是我猜想这会带来严重的性能损失,并且语法确实很奇怪。
是否有一些草案建议以class
一种或另一种方式在符号中包含变量?如果是这样,建议的语法是什么,它在哪里发布,在哪里讨论,讨论如何进行,以及这方面的当前情况是什么?就目前而言,如果以前没有在任何层面上讨论过这样的问题,则无法回答这个问题,但我认为这不太可能。
背景知识:目前,我正在使用ES6作为输入,使用Google Closure编译器执行高级编译。为此,我需要放置一个用于成员变量的类型注释的位置,并且我曾经使用诸如/** @type {string} */ MyClass.prototype.arg;
ECMAScript中的语义无操作之类的语法放置它们,但可以轻松方便地向闭包编译器提供类型信息。我还没有找到一种类似的好方法来使用class
构造方法。但是,如果您想解决这个问题,那将是一条评论。上面的问题是关于成员声明的,这些成员声明比no-op更重要,所以这就是这里应该讨论的答案。
ES6几乎肯定不会涵盖定义类变量的语法。使用类语法只能定义方法和获取/设置器。这意味着您仍然必须MyClass.classVariable = 42;
遵循类变量的路线。
如果只想用一些默认值初始化一个类,则可以为函数参数和解构默认值提供丰富的新语法集。举一个简单的例子:
class Foo {
constructor(foo = 123) {
this.foo = foo;
}
}
new Foo().foo == 123
new Foo(42).foo == 42
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句