如何在其实例上访问es-2015类方法?

Mih*_*ail 3 javascript oop class ecmascript-6 es2015

比如我有

class MyClass {

  constructor() {
    this.myMethod = this.myMethod.bind(this);
    // ... some more code
    // return what?
  }

  myMethod() {
   this.myMethod2();
   // do stuff ...
  }

  myMethod2() {
    // do stuff 2 ...
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我会做这样的事情

let obj = new MyClass();
Run Code Online (Sandbox Code Playgroud)

而我想要做的就是访问myMethodobj

obj.myMethod();
Run Code Online (Sandbox Code Playgroud)

显然,如果在其代码中myMethod调用其他MyClass方法(如myMethod2),我希望一切按预期工作.所以我假设构造函数应该返回某种对象并包含它的公共方法(可以访问对象的私有方法),但是如何做呢?

Aln*_*tak 5

在ES6类中拥有私有方法的唯一方法(我知道)是将它们定义为构造函数的内部函数:

class MyClass {
    constructor() {
        let privateVar = 'foo';
        let privateMethod = () => {
            return privateVar;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在构造函数之外定义的任何方法都是隐式公共的.

可以访问私有变量或方法的唯一公共方法是在构造函数的词法范围内类似定义的方法,并作为以下属性附加到当前实例this:

constructor() {
    let privateVar = 'foo';
    let privateMethod = () => {
        return privateVar;
    }
    this.publicMethod = () => {
        return privateMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

(注意,使用箭头函数意味着this内部this.publicMethod总是指向当前实例而不需要.bind调用)