2016-02-17 59 views
0

所以我已经阅读了各种计算器。在ES6中这是无效的:ES6类属性定义

class MyClass { 
    myProperty = ""; 

    constructor() { 
     this.myProperty = "Hey"; 
    } 
} 

但它在ES7中有效。

然而,这是有效的:

class MyClass { 
    setViewModel(viewModel) { 
     this.internalViewModel = viewModel; 
    } 

    get viewModel() { return this.internalViewModel } 
} 

在这里,直到我实际上设置还没有定义internalViewModel。我希望如果您在致电myClass.viewModel之前尚未拨打myClass.setViewModel(something),则会从myClass.viewModel返回undefined

这是正确的吗?

如果你有这个ES7类,你试图访问myProperty像这样myClass.myProperty你会得到预期的"Hey"或不?

+1

其实它在ES7中也是无效的,但在ES8中可能会有效。 – Bergi

+0

类属性不是ES7的一部分。 –

+0

[建议](https://github.com/jeffmo/es-class-fields-and-static-properties)实际上是[阶段0提案](https://tc39.github.io/process-document /)。 – towerofnix

回答

2

这个ES6是否正确?

是的。

尽管在构造函数中不创建所有属性可能被认为是不好的做法。

如果你有这样的ES7类和您试图访问myProperty像这样myClass.myProperty,你会得到预期的"Hey"与否?

是的,但请注意,myProperty不是一个类,而是一个实例属性。

var myClass = new MyClass; 
myClass.myProperty; // "Hey" 

此外,在初始化器实例字段声明完全是多余的,无论如何,因为它覆盖马上通过近等效this.myProperty = "Hey";