2016-01-25 6 views
2

В новом ES6 классе синтаксис не представляется возможным сделатькласса статические свойства

class Person { 
    this.type = 'person'; 

Но если я определяю свойство внутри застройщик it works:

class Person { 
    constructor(name) { //class constructor 
     this.name = name; 
     this.type = 'person'; 
    } 

Я знаю, что возможность иметь свойства вне методов is being discussed, но на сегодняшний день и что касается спецификаций ES6, это невозможно.

Является ли мое решение правильным способом определения статических свойств для класса (по семантическим причинам я определил эти свойства внутри конструктора, но, похоже, работает внутри других методов)? Есть ли способ лучше?

Я просмотрел spec в Method Defenition и не нашел никакой информации об этом.

+0

Зависит от того, как вы хотите получить к ним доступ. Эта реализация дает каждому экземпляру член с именем 'type', но если вы хотите, чтобы статика была больше похожа на то, как C# делает это, вы делаете что-то вроде Person.type = 'person''. Тогда он будет привязан только к классу, а не к отдельным экземплярам. –

+0

@MikeC Есть много случаев для таких свойств, у меня не было особых соображений. Если мы расширим его [мы все еще можем использовать/изменить] (http://www.es6fiddle.net/ijufl5c6/) это свойство. Мой вопрос больше в строках вроде: _ это нормально делать? _, Или есть более правильный способ? _, Который можно сделать изнутри класса. – Rikard

+3

Тогда я бы сказал, да, все в порядке. [Хотя я бы не назвал эти «статические свойства»] (http://stackoverflow.com/a/1535687/371184). Это «свойства экземпляра» или просто свойства. –

ответ

3

Как уже говорилось, то, что вы делаете, создает объект . Добавление таких свойств в конструктор - это то, для чего существует конструктор. Это не изменилось с ES6.

9

Вы можете создать статический поглотитель:

"use strict"; 
 

 
class Person { 
 
    static get type() { 
 
    return 'person' 
 
    } 
 
} 
 

 
console.log(Person.type) // 'person'

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