Javascript 在ES6类中实现数据隐私的另一种方法

Javascript 在ES6类中实现数据隐私的另一种方法,javascript,class,oop,ecmascript-6,Javascript,Class,Oop,Ecmascript 6,我正在阅读JavaScript中的数据隐私以及如何在ES6类中实现这一点。我注意到了这一点 class Person { constructor(name) { let _name = name this.setName = function(name) { _name = name; } this.getName = function() { return _name; } } } 那么我们就不能像这样访问_name了 cons

我正在阅读JavaScript中的数据隐私以及如何在ES6类中实现这一点。我注意到了这一点

class Person {
    constructor(name) {
        let _name = name
        this.setName = function(name) { _name = name; }
        this.getName = function() { return _name; }
    }
}
那么我们就不能像这样访问_name了

const p1 = new Person('bob');
p1._name = 'John';
因为_名称不是对象属性的一部分。 似乎它可以实现数据隐私。
但是我想知道这是否是一个好的实践。

大多数开发人员都知道前导下划线是一个私有变量,不适用于一般的API使用。可见与否并不重要。在这里,为每个属性使用getter和setter实际上是太多的样板文件,坦率地说是浪费时间

此外,
this.setName
this.getName
没有连接到原型链,这就消除了几乎任何优化的能力,例如能够在多个实例之间重用类方法

如果您想要真正的隐私,请使用工厂函数而不是类


作为对你问题的回答,不,这样写课通常不是好的做法。

是的,这种做法很好。虽然通常没有必要。