我对JavaScript还比较新,正在阅读文档,
根据MDN文档:
保持对象的内部状态私有,并通常在其公共接口和私有内部状态之间进行明确区分,称为封装。
他们没有提到
如何保持对象的内部状态私有?
此外,它进一步提到:
在不强制执行访问的语言中,程序员使用命名约定来指示该属性应被视为私有,例如以下划线开头的名称。
那么这行代码是什么意思呢?
以下划线开头的名称,表示该属性应被视为私有。
这是否意味着如果我在属性名前面加上 _
,它就会变成私有属性了,那么变为私有属性和使其成为私有属性之间有什么区别呢?将下划线放在前面是否能明确地告诉JavaScript该属性是私有的呢?
此外,他们没有提供任何具体的代码来解释这一点,我只能找到伪代码。
class Student : extends Person
properties
year
constructor
Student(name, year)
methods
introduceSelf()
canStudyArchery() { return this.year > 1 }
我谷歌搜索了这个问题,发现闭包被用来实现封装行为,但是MDN文档没有任何地方说明这一点。面向对象编程#封装
问题: 如何在没有闭包的情况下实现JavaScript中的封装,我们可以使用像Object.freeze
这样的东西吗?有人可以举个例子解释一下吗?
谢谢。