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

时间:2015-12-23 11:57:41

标签: javascript class oop 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 ...
  }
}

然后我会做这样的事情

let obj = new MyClass();

我想要做的是从myMethod

访问obj
obj.myMethod();

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

1 个答案:

答案 0 :(得分:5)

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

class MyClass {
    constructor() {
        let privateVar = 'foo';
        let privateMethod = () => {
            return privateVar;
        }
    }
}

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

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

constructor() {
    let privateVar = 'foo';
    let privateMethod = () => {
        return privateVar;
    }
    this.publicMethod = () => {
        return privateMethod();
    }
}

(请注意,使用箭头功能意味着this内的this.publicMethod将始终指向当前实例而无需.bind调用)