JavaScript ES6 类中的私有属性

是否可以在 ES6 类中创建私有属性?

下面是一个示例。如何阻止访问 ?instance.property

class Something {
  constructor(){
    this.property = "test";
  }
}

var instance = new Something();
console.log(instance.property); //=> "test"

答案 1

简短的回答,不,没有对具有ES6类的私有属性的本机支持。

但是,您可以通过不将新属性附加到对象,而是将它们保留在类构造函数中,并使用 getter 和 setter 来访问隐藏属性来模拟该行为。请注意,getter 和 setter 在类的每个新实例上都会被重新定义。

断续器

class Person {
    constructor(name) {
        var _name = name
        this.setName = function(name) { _name = name; }
        this.getName = function() { return _name; }
    }
}

夏令时

function Person(name) {
    var _name = name
    this.setName = function(name) { _name = name; }
    this.getName = function() { return _name; }
}

答案 2

私人课程功能位于第3阶段提案中。它的大多数功能都受到所有主流浏览器的支持。

class Something {
  #property;

  constructor(){
    this.#property = "test";
  }

  #privateMethod() {
    return 'hello world';
  }

  getPrivateMessage() {
      return this.#property;
  }
}

const instance = new Something();
console.log(instance.property); //=> undefined
console.log(instance.privateMethod); //=> undefined
console.log(instance.getPrivateMessage()); //=> test
console.log(instance.#property); //=> Syntax error