es6类有公共属性和功能吗?

时间:2015-06-10 12:16:23

标签: javascript class properties public ecmascript-6

我看到的所有类的例子都是

class myClass{
    constructor(){}
    someFunction(){}

我想要添加的是

    someObject {myvalue:value}
}

这似乎没有编译。一个老式的对象将是

{
    somefunction: function(){}
    someProperty:  {myvalue:value}
} 

这在es6课程中是不可能的吗?

2 个答案:

答案 0 :(得分:6)

您需要将它放在构造函数中:

class myClass{
    constructor(){
        this.someObject = { myvalue:value };
    }
}
var obj = new myClass();
console.log(obj.someObject.myvalue); // value

如果需要,您可以将对象添加到原型链中,就像在ES5中一样:

class myClass{
    constructor(){

    }
}
myClass.prototype.someObject = { myvalue:value };
var obj = new myClass();
console.log(obj.someObject.myvalue); // value

请注意,类上没有真正的私有属性。您附加到类的任何变量都是公共的。

Class Properties in ES7有一个0阶段提案。如果使用Babel,可以使用实验模式启用,允许以下内容:

class MyClass {
  myProp = {value: "one"};
  constructor() {
    console.log(this.myProp);
  }
}

答案 1 :(得分:3)

有一种简单的方法来模拟属性:getters。

var obj = {myvalue:value};

class Foo {
    get someProperty() {
       return obj;
    }
}

完全使用它是否有意义取决于用例。