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