2015-06-10 3 views
2

Все примеры классов, которые я вижу вМожет ли класс es6 иметь общедоступные свойства, а также функции?

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

, что я хочу добавить

someObject {myvalue:value} 
} 

это, кажется, не компилировать. Старомодным объектом будет

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

Это невозможно в классах es6?

+0

Почему вы хотите, чтобы значение хранилось на прототипе? – loganfsmyth

ответ

4

Вы должны были бы поместить его в конструкторе:

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 

Примечание что нет такой вещи, как real приватная недвижимость на классе. Любая переменная, которую вы прикрепляете к классу, является общедоступной.

Предложение 0 для Class Properties in ES7. При использовании Бабеля, это может быть включено с помощью экспериментального режима, что позволяет следующее:

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

Привет, спасибо, но я действительно хочу это как на прототипе, так и в объявлении класса. Это возможно? – Raif

+0

В настоящее время вы можете добавить в прототип то же, что и в ES5: 'myClass.prototype.someObject = {...};'. Если вы используете Babel, он позволяет использовать [Свойства класса ES7] (https://gist.github.com/jeffmo/054df782c05639da2adb) в экспериментальном режиме – CodingIntrigue

+0

Я должен сказать, что это почти смехотворное упущение в спецификации класса. Я имею в виду, какой идиот проектирует класс, который имеет только функции? Если вам нужны только функции, вам даже не нужен проклятый класс. Очень неприятная ситуация. В любом случае, спасибо, что указали мне на решение es7 babel. – Raif

3

Существует простой способ имитировать свойство: добытчик.

var obj = {myvalue:value}; 

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

Имеет ли смысл использовать его полностью, зависит от варианта использования.

+0

Да, спасибо. Я нацелен на что-то элегантное, как образец для моего домена. И элегантным я имею в виду простой без большого количества необходимых процедурных знаний. Я не думаю, что синтаксический сахар класса будет работать. Но я могу найти способ. Поэтому мой объект будет набором функций. Я не хочу, чтобы он был вложен глубже, чем необходимо. – Raif

+0

Хех, я забыл о сборщиках ES5 - это намного чище, чем использование прототипа, что неочевидно в ES6. – CodingIntrigue

Смежные вопросы