Почему классы js не используют публичные и приватные ключевые слова? - PullRequest
0 голосов
/ 28 марта 2019

Поэтому, когда они создавали классы es6, по умолчанию они просто делали все общедоступным, и это было немного странно для меня, но я просто согласился с этим, учитывая, что я все еще использовал старые классы на основе стилей es5.

В любом случае, через несколько лет у нас будут частные члены на уроках, что выглядит замечательно, но затем вы посмотрите на synax:

somePublicVar = 10;
#somePrivateVar = 20;

Как вы можете видеть, теперь мы должны поставить префикс приватных вещей со знаком хеш / фунт, что кажется очень странным выбором, поскольку JS имеет ключевые слова public и private, которые зарезервированы для будущего использования, поэтому теперь мы хотим Различать публичное и частное, почему бы не сделать это сейчас.

public somePublicVar = 10;
private somePrivateVar = 20;

Так что я уверен, что есть техническая причина, почему, но я изо всех сил пытаюсь найти ее, как сейчас, казалось бы, было бы идеальным временем для того, чтобы превратить эти public и private из зарезервированных в «используемые», делая это немного более явно и очевидно относительно модификаторов доступа данного члена.

1 Ответ

3 голосов
/ 28 марта 2019

Официальный FAQ отвечает на него:

Почему не объявления private x?

Этот тип объявлений используется другими языками (особенноJava), и подразумевает, что доступ будет сделан с this.x.Предполагая, что это не так (см. Выше), в JavaScript это будет молча создавать или открывать открытое поле, а не выдавать ошибку.Это основной потенциальный источник ошибок или незаметного создания открытых полей, которые должны были быть закрытыми.

Он также допускает симметрию между объявлением и доступом, так же как и для открытых полей:

class A {
  pub = 0;
  #priv = 1;
  m() {
    return this.pub + this.#priv;
  }
}

https://github.com/tc39/proposal-class-fields/blob/master/PRIVATE_SYNTAX_FAQ.md#why-arent-declarations-private-x

...