如何在Javascript中实现封装



我是Javascript的新手,我正在阅读文档和

根据MDN文件:-

保持对象的内部状态私有,并且通常使明确划分其公共接口和私人内部状态,称为封装。

他们没有提到

如何保持对象的内部状态私有?

还进一步提到,

在不强制执行这种访问的语言中,程序员使用命名约定,例如以下划线开头的名称表明该财产应被视为私有财产。

那么这行是什么意思

以下划线开头的名称,表示属性应该被认为是私人的。

这是否意味着,如果我将_放在属性名称之前,它将变为私有,变为私有和变为私有之间没有区别吗。放一个下划线告诉Javascript这个属性是私有的吗?

此外,他们还没有提供任何具体的代码来解释我只能找到伪代码

class Student : extends Person
properties
year
constructor
Student(name, year)
methods
introduceSelf()
canStudyArchery() { return this.year > 1 }

我在谷歌上搜索了一下,发现闭包是用来实现封装行为的,但MDN文档在任何地方都没有说明这一点Object-oriented_programing#encapsulation

问题:-如何在没有闭包的情况下在Javascript中实现封装?我们可以使用类似Object.freeze的东西吗?有人可以用一个示例来解释吗

谢谢。

这是否意味着如果我将_放在属性名称之前,它就会变成私人

否。字段名称之前的_用于向读取器传达这些字段意味着是私有的;从技术上讲,它们不是私人的。其他代码可以访问它们并对它们进行变异。

真正私有的字段最近在Javascript语言中引入。

在引入上述功能之前,Javascript开发人员使用不同的技术来实现私有字段——使用闭包就是其中之一。

最新更新