【问题标题】:Is this a way to implement ES6 private class members?这是实现 ES6 私有类成员的一种方式吗?
【发布时间】:2020-04-03 17:59:07
【问题描述】:

在 ES6 类中通常如何声明成员函数方面跳出框框,这难道不是实现私有成员和公共成员之间区别的有效方法吗?

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。然后该类提供公共操作以将数字翻倍和翻两番。

私有成员 xPlus1 是超级私有的,因为即使是类成员也无法访问它——如果它们位于构造函数之外。但是类方法可以构造函数中定义,那有什么区别呢?

我看到的一个松散的结局是,与公共成员相比,私有成员在访问时不需要以“this”为前缀。但这似乎微不足道;人们甚至可能将其视为一种好处,因为它迫使开发人员了解类成员各自的可见性。

这有我没有看到的缺点吗?我们可以在构造函数之外定义公共方法,但我们是否愿意这样做?鉴于必须在构造函数内部定义公共字段,是否有某些原因必须在其外部定义公共方法?

【问题讨论】:

    标签: ecmascript-6 es6-class


    【解决方案1】:

    这有我没有看到的缺点吗?

    除此之外,是的,它通过闭包范围适当地实现了隐私,并且有时用于此目的。

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 2018-11-13
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      相关资源
      最近更新 更多