ES12 中的 Private Methods 和 Private Accessors:保护类方法

· 约 5 分钟读完

随着前端开发越来越复杂,对于代码安全性和代码组织的要求也越来越高。在 ES12 中,引入了 Private Methods 和 Private Accessors 的概念来保护类方法。本文将对这两个概念进行详细介绍,并提供示例代码和指导意义。

Private Methods

在 ES6 之前,JavaScript 中的类成员默认都是公有的(public)。也就是说,所有成员都可以从实例对象和子类中访问。这样的设计存在一个问题:一旦类成员被公开,就很难确保其正确性和安全性。因此,需要引入 Private Methods 来保护类方法的访问与使用。

Private Methods 的语法是在方法名前加上井号(#)。例如:

在上面的代码中,#privateMethod() 为 Private Method,只能在类内部使用。在 publicMethod() 中,可以通过 this.#privateMethod() 访问并调用 Private Method。

需要注意的是,Private Method 的名称与公有方法一样,是在类的原型上声明的。但是,由于 Private Method 的存在,它们不会被继承或覆盖。这样可以保证类的方法不会被误用或篡改。

Private Accessors

与 Private Methods 类似,Private Accessors 也是为了保护类成员的访问和使用。在 ES12 中,引入了 getter 和 setter 的私有版本,称为 Private Accessors。

Private Accessors 的语法是使用 set 和 get 关键字,并在成员名前加上井号(#)。例如:

在上面的代码中,#name 为类的私有成员;#formattedName 为私有 Accessor,它的值可以通过类的公有方法 name 和 name= 访问。在 #formattedName 中,可以对 #name 进行数据格式化,确保外部对该成员的访问和使用符合类的设计。

与 Private Methods 一样,Private Accessors 也不能被继承或覆盖。需要注意的是,类可以包含公有 Accessors 和私有 Accessors,使用方法与普通的 getter 和 setter 类似。

示例代码

下面是 Private Methods 和 Private Accessors 的示例代码:

在上面的代码中,#name 和 #log() 为私有成员和 Private Method,不能从外部访问。在 setName(name) 中设置了 #name 并打印了该值。

下面是 Private Accessors 的示例代码:

在上面的代码中,#firstName 和 #lastName 为私有成员,只能通过私有 Accessor #fullName 访问。在 name 这个公有 Accessor 中,可以通过 #fullName 获取或修改姓名。最后打印了 person 的姓名。

指导意义

Private Methods 和 Private Accessors 可以帮助开发者保护类的方法和数据,避免被外部访问和修改、并确保类的正确性和安全性。它们的引入使得开发者可以更加自由地组织代码,以满足复杂应用的开发需求。

需要注意的是,Private Methods 和 Private Accessors 在开发过程中需要谨慎使用。使用不当会增加代码复杂度、难以调试和维护,并可能影响代码的性能。因此,在实际开发中,应该根据具体情况合理运用 Private Methods 和 Private Accessors,并进行良好的代码组织和设计,以提高代码的可读性和可维护性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bc6ec5a231b2b7ede09d08