类的私有方法

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()来直接访问类内部的变量了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容