es6 Class 的私有方法

Class 的私有方法

私有方法是常见需求,但 ES6 不提供,只能通过变通方法模拟实现。

一种做法是在命名上加以区别。

 
 
  1. class Widget {
  2. // 公有方法
  3. foo (baz) {
  4. this._bar(baz);
  5. }
  6. // 私有方法
  7. _bar(baz) {
  8. return this.snaf = baz;
  9. }
  10. // ...
  11. }

上面代码中,_bar方法前面的下划线,表示这是一个只限于内部使用的私有方法。但是,这种命名是不保险的,在类的外部,还是可以调用到这个方法。

另一种方法就是索性将私有方法移出模块,因为模块内部的所有方法都是对外可见的。

 
 
  1. class Widget {
  2. foo (baz) {
  3. bar.call(this, baz);
  4. }
  5. // ...
  6. }
  7. function bar(baz) {
  8. return this.snaf = baz;
  9. }

上面代码中,foo是公有方法,内部调用了bar.call(this, baz)。这使得bar实际上成为了当前模块的私有方法。

还有一种方法是利用Symbol值的唯一性,将私有方法的名字命名为一个Symbol值。

 
 
  1. const bar = Symbol('bar');
  2. const snaf = Symbol('snaf');
  3. export default class myClass{
  4. // 公有方法
  5. foo(baz) {
  6. this[bar](baz);
  7. }
  8. // 私有方法
  9. [bar](baz) {
  10. return this[snaf] = baz;
  11. }
  12. // ...
  13. };

上面代码中,barsnaf都是Symbol值,导致第三方无法获取到它们,因此达到了私有方法和私有属性的效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值