private 与 #private 的比较

💡 原文英文,约1700词,阅读约需7分钟。
📝

内容提要

本文讨论了在TypeScript中使用private关键字和在ECMAScript中使用#符号实现私有属性和方法的区别。在TypeScript中,private关键字只在编译时起作用,而在JavaScript中不起作用;而在ECMAScript中,#符号是真正的私有属性,JavaScript引擎在运行时会强制执行私有性。作者提出了一个约定,即对于绑定方法使用ES private,对于属性的后备字段使用ES private,其他情况使用TypeScript private。此外,文章还讨论了JavaScript中this关键字的工作原理以及在回调函数中正确使用this。最后,作者提到了在Vue中使用private和#的区别。

🎯

关键要点

  • TypeScript中的private关键字在编译时有效,但在JavaScript中无效。
  • ECMAScript中的#符号实现真正的私有属性,JavaScript引擎在运行时强制执行私有性。
  • 建议:绑定方法使用ES private,属性后备字段使用ES private,其他情况使用TypeScript private。
  • this关键字的值在函数调用时确定,通常由调用方式决定。
  • 在严格模式下,this的值为undefined,而非严格模式下为全局对象。
  • 使用.bind方法可以预设this的值,箭头函数的this值在创建时确定。
  • 在回调函数中,this的值通常为undefined,需要使用绑定方法解决。
  • 在Vue中,使用private和#的区别在于Proxy对象的影响,#属性无法从外部访问。
  • 使用private在JavaScript中并不是真正的私有,可能会导致访问问题。
➡️

继续阅读