首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6 -如何声明隐式类成员?

ES6 -如何声明隐式类成员?
EN

Stack Overflow用户
提问于 2018-05-05 14:14:15
回答 3查看 275关注 0票数 3

如果类成员是从某些选项创建的,如何声明它们?

代码语言:javascript
复制
class cls {

    constructor(options) {

        Object.assign(this, {
            arr: [],
        }, options);

        this.arr[0] = 1; // <- IDE thinks that arr is an unresolved variable
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-05 15:20:27

为了让IDE (Jetbrains PhpStorm/WebStorm)能够识别未明确定义的类属性,可以使用JSDoc指定一个成员:

代码语言:javascript
复制
class cls {
    /**
     @name cls#arr
     @type Array
     */

    constructor(options) {...}
}

由于Object.assign的属性分配没有提供额外的好处,所以更自然的方法是在this上显式地定义属性(正如其他答案所提到的)。

在ES6中:

代码语言:javascript
复制
class cls {
   constructor(options) {
        this.arr = [];

        Object.assign(this, options);

        this.arr[0] = 1;
    }
}

在ES.next with 类字段提案中,需要在Babel中预先设置第3阶段(或更低的阶段):

代码语言:javascript
复制
class cls {
   arr = [];

   constructor(options) {
        Object.assign(this, options);

        this.arr[0] = 1;
    }
}

类字段在构造函数体之前进行评估,ES.next选项是ES6选项的语法糖。这两个选项是相同的,并被IDE识别。

票数 3
EN

Stack Overflow用户

发布于 2018-05-05 14:19:49

如果您使用的是Babel,则可以使用类属性

代码语言:javascript
复制
class cls {
    arr = []
    constructor(options) {
        Object.assign(this, options);
        this.arr[0] = 1;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-05-05 14:55:17

只是不要使用Object.assign来创建带有默认值的属性。写

代码语言:javascript
复制
class cls {
    constructor(options) {
        this.arr = [];
        Object.assign(this, options);
        this.arr[0] = 1; // should work now
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50190384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档