收录了这篇文章
在传统的JavaScript中,没有原生支持私有方法和私有属性的概念,但开发者通常遵循一些约定和模式来模拟私有性。随着ECMAScript的发展,特别是ES2022引入了类的私有字段,现在有了官方的标准方法来定义私有成员。
传统方法(模拟私有性)
-
下划线前缀或下划线后缀:这是一种约定,用 _ 前缀或后缀来标记一个属性或方法为“私有的”,但实际上它仍然是公有的。
function MyClass() { var _privateVar = 'private'; this.getPrivateVar = function() { return _privateVar; }; }
-
闭包:利用函数作用域来隐藏变量,达到模拟私有成员的目的。
function MyClass() { var privateVar = 'private'; this.getPrivateVar = function() { return privateVar; }; }
ES2022 私有字段(#)
从 ECMAScript 2022 开始,可以在类中使用 # 符号来声明私有字段。这提供了真正的私有性,这些字段只能在类的内部访问。
class MyClass {
#privateField = 'private';
getPrivateField() {
return this.#privateField;
}
setPrivateField(value) {
this.#privateField = value;
}
}
const instance = new MyClass();
console.log(instance.#privateField); // 报错,外部不能直接访问
console.log(instance.getPrivateField()); // 正确访问私有字段
instance.setPrivateField('new value');
console.log(instance.getPrivateField()); // 输出: new value
请注意,私有方法和私有字段以 # 开头,它们不能在类的外部直接访问,甚至子类也不能访问父类的私有成员,这增强了封装性,有助于避免意外修改和提高代码的可维护性。
声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。