ES6类中的成员变量

最好的祝福

是否可以使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将具有成员变量的React组件重构为es6类

来自分类Dev

在类和构造函数中访问ES6 / ES7静态类变量

来自分类Dev

在es6 javascript类的非静态成员函数中调用静态getter

来自分类Dev

在es6类上创建私人成员

来自分类Dev

在es6类上创建私人成员

来自分类Dev

使用ES6类中的new存储在变量中时,节点获取错误

来自分类Dev

ES6类文字中的IIFE

来自分类常见问题

从库中模拟ES6类

来自分类Dev

在es6中克隆类

来自分类Dev

es6类方法中的“ this”

来自分类Dev

在ES6中扩展String类

来自分类Dev

在ES6中扩展String类

来自分类Dev

从库中模拟ES6类

来自分类Dev

ES6类中“ this”的范围

来自分类Dev

如何在es6类中声明私有变量和私有方法

来自分类Dev

将ES6类存储在变量中,并通过Object.Create对其进行实例化

来自分类Dev

ES6全局变量在类中不可用

来自分类Dev

ES6类实例变量如何工作

来自分类Dev

向 ES6 类添加变量方法

来自分类Dev

Javascript 在类构造函数中调用类 (ES6)

来自分类Dev

JavaScript ES6:es6类中的分组方法?

来自分类Dev

充当类中的“变量”成员

来自分类Dev

嵌套的ES6类?

来自分类Dev

ES6类的范围

来自分类Dev

ES6 JavaScript 类

来自分类Dev

使用嵌套类在ES6中模拟名称空间

来自分类Dev

在ES6中,如何检查对象的类?

来自分类Dev

es6类中的reactjs'this'上下文

来自分类Dev

从ES6类的Promise中设置属性