您现在的位置:首页 >> 前端 >> 内容

es6 Class的私有方法实例讲解

时间:2018/2/2 11:48:46 点击:

  核心提示:Class 的私有方法私有方法是常见需求,但ES6 不提供,只能通过变通方法模拟实现。一种做法是在命名上加以区别。class Widget { // 公有方法 foo (baz) {this._bar...

Class 的私有方法

私有方法是常见需求,但 

ES6 不提供,只能通过变通方法模拟实现。

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

class Widget {

  // 公有方法

  foo (baz) {

    this._bar(baz);

  }

  // 私有方法

  _bar(baz) {

    return this.snaf = baz;

  }

  // ...

}

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

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

class Widget {

  foo (baz) {

    bar.call(this, baz);

  }

  // ...

}

function bar(baz) {

  return this.snaf = baz;

}

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

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

const bar = Symbol('bar');

const snaf = Symbol('snaf');

export default class myClass{

  // 公有方法

  foo(baz) {

    this[bar](baz);

  }

  // 私有方法

  [bar](baz) {

    return this[snaf] = baz;

  }

  // ...

};

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

Tags:ES S6 6C CL 
作者:网络 来源:Web先生的博客