ES6并不提供私有方法的,所以通过变通方法来模拟。今天在看阮老师的ES6的时候看到一种模拟私有方法的解决方案,但当时对阮老师的描述产生了疑惑。
class Widget {
foo(baz) {
bar.call(this, baz);
}
}
function bar(baz) {
return this.snaf = baz;
}
//上面的代码中,foo是公有方法,内部调用了bar.call(this, baz)。这使得bar实际上成为了当前模块的私有方法
当时看到这句话对”当前模块的私有方法“不太理解,因为个人之前接触过一点点C++和Java,所以认为私有方法应该是类外面任何地方都不能访问这个方法。但上面这种写法是可以在全局环境下访问到bar()这个函数的。
class Widget {
foo(baz) {
bar.call(this, baz);
}
}
function bar(baz) {
//return this.snaf = baz;
console.log(baz);
}
bar("从全局环境访问bar函数#####");
//从全局环境访问bar函数#####
最后仔细琢磨了下,这个地方的私有应该是指在类外部不能通过 对象.函数名 的方式来访问bar(),只能通过公有方法foo()来访问bar函数(通过call来改变函数的作用域),也就是说在类的外部不能通过bar()来直接访问类内部的变量了。