介绍
在前端开发中,打字稿(TypeScript)是一种流行的静态类型语言,它可以帮助开发者在开发过程中避免很多常见的编程错误。在 TypeScript 中,除了公共成员外,还支持私有成员,这些成员只能被其所属的类及其子类访问。本文将介绍 TypeScript 私有成员的相关知识并提供示例代码。
示例代码
-- -------------------- ---- ------- ----- ------ - ------- ----- ------- ------ ---- ------- ----------------- ------- ---- ------- - --------- - ----- -------- - ---- - ------- -------------- ------ - ------ ---------- - ------ ----------- ---- - ------------------- -- ---- -- ---------------------- --- ----------- ----- ------- - - ----- ------ - --- -------------- ---- ------------------------- -- ------ ------ -------------- ------------------ -- ------- ------ -- ---- -- ----- --- -- ----- ----
在上面的示例代码中,我们定义了一个 Person
类,其中包含了一个私有属性 name
和一个公共属性 age
。我们还定义了一个私有方法 getFullName()
,它返回实例的完整名称。最后,我们在 Person
类中定义了一个公共方法 sayHello()
,该方法调用 getFullName()
方法并输出欢迎消息。
在代码的最后,我们创建了一个 Person
类的实例,并尝试访问 name
属性。由于 name
是私有属性,所以 TypeScript 编译器会报错。然而,我们可以在类中调用 sayHello()
方法,并且它可以成功输出消息。
详解
私有成员是指只能在其所属的类内部访问的成员。在 TypeScript 中,我们可以通过在属性或方法前添加 private
关键字来将它们定义为私有成员。例如:
class Example { private someProperty: string; private someMethod(): void { // ... } }
在上面的示例中,我们定义了一个名为 Example
的类,并使用 private
关键字将 someProperty
和 someMethod
定义为私有成员。
与公共成员不同,私有成员不能被类的实例或类的外部访问。如果你尝试在类外部读取或写入私有成员,TypeScript 编译器会报错。例如:
class Example { private someProperty: string; } const example = new Example(); console.log(example.someProperty); // Error: 'someProperty' 是私有属性,无法在类外部访问 example.someProperty = 'new value'; // Error: 'someProperty' 是私有属性,无法在类外部访问
由于 someProperty
是私有成员,所以我们不能从类的实例中访问它。同时,我们也不能在类外部写入 someProperty
的值。
私有成员不仅限于属性,还可以是方法。与属性一样,我们可以使用 private
关键字将方法定义为私有成员,并在类内部调用它们。例如:
-- -------------------- ---- ------- ----- ------- - ------- ------------- ---- - -- --- - ------ -------------- ---- - ------------------ -- ---------- - - ----- ------- - --- ---------- --------------------- -- ------ ------------ -------------- ---------------------- -- -------------------
在上面的示例中,我们定义了一个名为 Example
的类,并使用 private
关键字将 someMethod()
定义为私有方法。我们还定义了另一个名为 `
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/12137