Это способ реализации закрытых классов ES6? - PullRequest
0 голосов
/ 03 апреля 2020

Выход за пределы поля с точки зрения того, как функции-члены обычно объявляются в классах ES6, разве это не эффективный способ реализовать различие между закрытыми и публикуемыми c членами?

class IncrementedNumber {
    constructor(x) {
        const xPlus1 = x + 1;
        this.getDouble = () => 2 * xPlus1;
        this.getQuadruple = () => 2 * this.getDouble();
    }
}
const x = new IncrementedNumber(6);
console.log(x.getDouble());    // 2 * 7 -> 14
console.log(x.getQuadruple()); // 2 * (2 * 7) -> 28

У класса есть закрытый член, который на 1 больше, чем число, указанное в качестве аргумента его конструктору. Затем класс предлагает публичные c операции для удвоения и четырехкратного увеличения числа.

Закрытый член xPlus1 superprivate , поскольку даже члены класса не могут получить к нему доступ - , если они l ie за пределами конструктора . Но методы класса могут быть определены внутри конструктора, так в чем же разница?

Единственный слабый конец, который я вижу, состоит в том, что закрытые члены, в отличие от публикуемых c членов, являются доступ без префикса "this". Но это кажется незначительным; Кто-то может даже посчитать это преимуществом, так как это заставляет разработчика осознавать видимость членов класса.

Есть ли недостатки этого, которых я не вижу? Мы можем определить методы publi c вне конструктора, но женаты ли мы на этом? Учитывая, что поля publi c должны быть определены внутри конструктора, есть ли какая-то причина, по которой методы publi c должны быть определены вне его?

1 Ответ

1 голос
/ 03 апреля 2020

Есть ли недостатки этого, которого я не вижу?

Кроме этого, да, он должным образом обеспечивает конфиденциальность через область закрытия и иногда используется для этого.

...