TypeScript 中的访问限制:使用 private 和 protected
在 TypeScript 中,我们可以使用 private 和 protected 两种访问修饰符来限制类的属性和方法的访问范围,这是面向对象编程的重要概念之一。本文将详细介绍 private 和 protected 的用法和区别,并提供一些示例代码和最佳实践。
- private 访问修饰符
在 TypeScript 中,private 访问修饰符用于限制类的属性和方法只能在类内部被访问,包括在同一个类的其他方法中。外部无法访问类的私有成员。其语法格式如下:
class MyClass { private myProp: string; private myMethod() { // do something } // ... }
示例代码:
-- -------------------- ---- ------- ----- ------ - ------- ----- ------- ----------------- ------- - --------- - ----- - ------ ---------- - ------------------- -- ---- -- ---------------- - - --- ---- - --- --------------- ---------------- -- ------- ------ -- ---- -- ----- ----------------------- -- ----------- ------ -------- ------ -- ------- --- ---- ---------- ------ ----- ---------
在上面的示例代码中,我们创建了一个 Person 类,它有一个私有属性 name 和一个公共方法 sayHello()。在 Person 类的构造函数中,我们将传入的参数 name 赋值给私有属性 name。在公共方法 sayHello() 中,我们使用 this.name 来访问私有属性 name。在外部,我们可以通过创建 Person 实例 john 来调用公共方法 sayHello(),但是我们无法直接访问私有属性 name。
注意,如果我们没有在构造函数中为私有属性赋值,它的默认值为 undefined。
- protected 访问修饰符
在 TypeScript 中,protected 访问修饰符用于限制类的属性和方法可以被类的子类访问,但是不能被外部访问。其语法格式如下:
class MyClass { protected myProp: string; protected myMethod() { // do something } // ... }
示例代码:
-- -------------------- ---- ------- ----- ------ - --------- ----- ------- ----------------- ------- - --------- - ----- - - ----- --- ------- ------ - ------ ------ - ------------------ ----- -- ---- -- ---------------- - - --- ----- - --- ------------- ------------- -- ------- ----- ----- -- ---- -- ------ ------------------------ -- ----------- ------ -------- ------ -- --------- --- ---- ---------- ------ ----- -------- --- --- -----------
在上面的示例代码中,我们创建了一个 Animal 类,它有一个受保护的属性 name。在 Animal 类的构造函数中,我们将传入的参数 name 赋值给受保护的属性 name。我们还创建了一个子类 Dog,它继承了 Animal 类的属性和方法。在公共方法 bark() 中,我们使用 this.name 来访问受保护的属性 name。在外部,我们可以通过创建 Dog 实例 lucky 来调用公共方法 bark(),但是我们无法直接访问受保护的属性 name。
注意,受保护的属性和方法也可以在子类中被访问和继承。
- 最佳实践
在使用 private 和 protected 访问修饰符时,我们需要考虑以下几点最佳实践:
- 只有在必要时才使用 private 和 protected 访问修饰符,因为它们会增加代码的复杂性和维护难度。
- 在 TypeScript 中,private 和 protected 访问修饰符只在编译时起作用,在运行时不会生效。因此,我们需要在编写 TypeScript 代码时保证数据的安全性。
- 在继承和实现接口时,我们需要了解 private 和 protected 访问修饰符的约束。子类和实现类无法访问父类或接口的私有成员,但是可以访问受保护的成员。
- 总结
对于 TypeScript 中的访问限制,我们需要了解 private 和 protected 两种访问修饰符的用法和区别,以及它们的最佳实践。在编写面向对象的 TypeScript 代码时,我们应该合理使用访问修饰符以确保数据的安全性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651cb86295b1f8cacd437221