比如我有
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
),我希望一切按预期工作.所以我假设构造函数应该返回某种对象并包含它的公共方法(可以访问对象的私有方法),但是如何做呢?
在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
调用)