ES6 classes private member syntax [duplicate]

2019-01-18 15:37发布

问题:

This question already has an answer here:

  • Private properties in JavaScript ES6 classes 35 answers

I have a quick question. What's the cleanest and straightforward way to declare private members inside ES6 classes?

In other words, how to implement

function MyClass () {
  var privateFunction = function () {
    return 0;
  };

  this.publicFunction = function () {
    return 1;
  };
}

as

class MyClass {

  // ???

  publicFunction () {
    return 1;
  }
}

回答1:

It's not much different for classes. The body of the constructor function simply becomes the body of constructor:

class MyClass {
  constructor() {
    var privateFunction = function () {
      return 0;
    };

    this.publicFunction = function () {
      return 1;
    };
  }
}

Of course publicFunction could also be a real method like in your example, if it doesn't need access to privateFunction.

I'm not particularily advising to do this (I'm against pseudo privat properties for various reasons), but that would be the most straightforward translation of your code.