ES2020 中类的新属性 private, protected, public 定义及使用方法
ES6 引入了类的概念,使得 JavaScript 语言能够更加贴合面向对象编程的思想,很大程度上简化了开发者的编程流程。在 ES2020 中,新增了类的新属性 private、protected、public,这些新的关键字定义了类中各个属性的访问权限,帮助开发者更好地进行封装和继承。
一、private
private 关键字声明的属性只能在类的内部使用,外部无法访问。在类的原型对象上,以 # 开头的属性名称用来声明 private 属性。为了保持私有性,JavaScript 引擎限制了私有属性的访问。
class Person { #name; // private property constructor(name) { this.#name = name; // setting the private property }
greet() {
console.log(Hello, my name is ${this.#name}
); // accessing the private property
}
}
const john = new Person('John'); console.log(john.#name); // throws error, cannot access private property outside of class john.greet(); // logs 'Hello, my name is John'
二、protected
protected 关键字声明的属性只能在类的内部和子类中访问,外部无法访问。在类的原型对象上,以 _ 开头的属性名称用来声明 protected 属性。
class RectangularShape { _height; // protected property _width; // protected property constructor(height, width) { this._height = height; this._width = width; }
getArea() { return this._height * this._width; // accessing the protected properties } }
class Square extends RectangularShape { constructor(side) { super(side, side); } }
const square = new Square(5); console.log(square.getArea()); // logs 25 console.log(square._height); // throws error, cannot access protected property outside of class and subclass
三、public
public 是默认的属性访问级别,可以在类的内部、子类和外部使用。在类的原型对象上,不需要额外的标识符来声明 public 属性。
class Car { manufacturer; // public property model; // public property constructor(manufacturer, model) { this.manufacturer = manufacturer; this.model = model; }
getInfo() {
return ${this.manufacturer} ${this.model}
; // accessing the public properties
}
}
const myCar = new Car('Toyota', 'Corolla'); console.log(myCar.getInfo()); // logs 'Toyota Corolla' console.log(myCar.manufacturer); // logs 'Toyota'
总结
类的私有、受保护和公共属性访问权限的引入,有助于开发者更好地实现数据的封装和继承,避免不必要的外部干扰。学习如何合理使用这些属性,可以提高代码的可读性和可维护性,从而更好地实现面向对象编程的目标。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652fcc647d4982a6eb0fdc54