在 ES6 中,我们通过使用 class
关键字来声明类,同时也引入了 public
和 private
修饰符来限制类的属性和方法的可访问性。不过在 ES7 中,这两个修饰符被取消了。
为什么取消 public/private 修饰符?
取消 public/private 修饰符的主要原因是因为 JavaScript 是一种弱类型语言,它无法在编译时检查类型错误,而这些修饰符在编译时并没有太大的作用。另外,使用这些修饰符也会使代码变得更加复杂,增加了阅读和维护的难度。
而在实际开发中,我们往往不需要类的属性和方法的可访问性进行严格的限制,这会限制代码的扩展性和灵活性。相反,我们更注重代码的可读性和可维护性。因此,取消 public/private 修饰符也是为了更好地满足这些需求。
如何替代 public/private 修饰符?
尽管取消了 public/private 修饰符,但我们仍然可以在类中使用一些技巧来实现相似的效果。以下是一些常见的实现方法:
命名约定
使用命名约定来表示属性和方法的访问级别。例如,使用 _
前缀来表示私有属性和方法,而不使用任何前缀或使用 $
前缀来表示公共属性和方法。
----- ------- - -- ---- --------------- - --------- -- ---- ---------------- - ---------- -- ---- --------------- - ------------------- --------- - -- ---- ---------------- - -------------------- --------- - -
Symbol
使用 Symbol
类型来表示私有属性和方法。Symbol
可以创建一个唯一的标识符,这样就可以防止外部访问该属性或方法。
----- -------------- - --------------- --------- ----- ------- - - -------------- --- - -------------------- --------- - -------------- - ------------------- --------- ----- -------------- ---- - -
WeakMap
使用 WeakMap
来存储私有属性。WeakMap
中存储的键值对只有在该键对象存在时才有效,一旦被垃圾回收器回收,键值对就被删除了。
----- ---------- - --- ---------- ----- ------- - ------------- - -- ------ -------------------- - ---------------- --------- --- - -- ------ -------------------- - ------ ------------------------------------- - -- ------ ------------------------- - ------------------------------------ - ------ - -- ---- -------------- - ------------------- --------- - -
总结
ES7 中取消 public/private 修饰符是为了简化代码,增加可读性和可维护性。使用命名约定、Symbol 或 WeakMap 可以替代这些修饰符来实现相似的效果。在实际开发中,我们应该更注重代码的可读性和可维护性,而不是过于严格地限制类的属性和方法的可访问性。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6486cbd748841e98945577ab