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中并不是真正的私有,可能会导致访问问题。

延伸问答

TypeScript中的private关键字有什么限制?

TypeScript中的private关键字在编译时有效,但在JavaScript中无效,编译后会被忽略。

ECMAScript中的#符号有什么特别之处?

ECMAScript中的#符号实现真正的私有属性,JavaScript引擎在运行时会强制执行私有性。

在Vue中使用private和#的区别是什么?

在Vue中,#属性无法从外部访问,而使用private则不受此限制,但在JavaScript中private并不是真正的私有。

如何在JavaScript中正确使用this关键字?

this的值在函数调用时确定,通常由调用方式决定。在严格模式下,this的值为undefined。

如何解决回调函数中this为undefined的问题?

可以使用.bind方法预设this的值,或者使用箭头函数来保持this的上下文。

在TypeScript中如何选择使用private或#?

建议对于绑定方法使用ES private,对于属性的后备字段使用ES private,其他情况使用TypeScript private。

➡️

继续阅读