ES6中类的私有方法

实现私有方法是类的常规操作,那么有哪些方法呢?经过查找有以下几种。

  1. 在命名上加以区分,在私有方法前加上下划线(不靠谱,该访问的还是可以访问到)
1
2
3
4
5
6
7
8
9
10
11
12
13
class Widget {
// 公有方法
foo(baz) {
this._bar(baz);
}

// 私有方法
_bar(baz) {
return (this.snaf = baz);
}

// ...
}
  1. 将方法移除类,这样方法对于类是不可访问的。(不靠谱,毕竟私有方法还是要在类中实现,除非类是单独的一个文档,反否则,这样这个函数对于类外的代码都是可以访问的)
1
2
3
4
5
6
7
8
9
10
11
class Widget {
foo(baz) {
bar.call(this, baz);
}

// ...
}

function bar(baz) {
return (this.snaf = baz);
}
  1. 使用 symbol 使得外界无法访问,symbol 值仍在类外(还行,缺点是过于复杂)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const bar = Symbol("bar");
const snaf = Symbol("snaf");

export default class myClass {
// 公有方法
foo(baz) {
this[bar](baz);
}

// 私有方法
[bar](baz) {
return (this[snaf] = baz);
}

// ...
}
0%