TypeScript 中如何使用类的实例成员
在 TypeScript 中,我们可以使用类的实例成员来封装和组织代码,使其更加易于维护和扩展。本文将介绍 TypeScirpt 中如何使用类的实例成员,并提供详细的示例代码以及指导意义,帮助读者更好地理解和使用此技术。
类的实例成员是什么
类的实例成员是指在类中定义的不属于静态成员的属性和方法。它们只能在类实例化后通过实例访问,而不能通过类直接访问。类的实例成员用于封装类的状态和行为,并且每个实例之间的状态是相互独立的。
实例成员的定义和访问
定义实例成员使用的关键字是 public
,如果不加,则默认为 public
。例如:
-- -------------------- ---- ------- ----- ------ - ----- ------- ---- ------- ----------------- ------- ---- ------- - --------- - ----- -------- - ---- - ---------- - ------------------- -- ---- -- ------------ --- - -- ----------- ----- ------- - - ----- ------ - --- ------------- ---- ------------------ -- --------- -- ---- -- --- --- - -- -- ----- ----
通过实例化一个 Person
对象,我们可以访问 Person
类中定义的实例成员。在构造函数中,我们将传入的参数 name
和 age
分别赋值给了 Person
类中的实例成员 name
和 age
。在 sayHello
方法中,我们通过 this.name
和 this.age
访问了实例成员中的数据。通过实例方法调用 person.sayHello()
,我们可以打印出该 Person
对象的信息。
实例成员的访问控制
在 TypeScript 中,我们可以通过访问控制修饰符来限制实例成员的访问权限,包括 public
,private
和 protected
。
public
public
是默认的访问控制修饰符。当声明实例成员时,如果没有显示地使用访问修饰符,那么该实例成员默认为 public
。例如:
-- -------------------- ---- ------- ----- ------ - ----- ------- ---- ------- ----------------- ------- ---- ------- - --------- - ----- -------- - ---- - ---------- - ------------------- -- ---- -- ------------ --- - -- ----------- ----- ------- - -
在这个例子中,name
和 age
都是默认为 public
的实例成员,因此它们可以从 Person
的实例中访问。
private
private
访问修饰符使得实例成员只能在类的内部访问,而不能从类的外部访问。例如:
-- -------------------- ---- ------- ----- ------ - ------- ---- ------- ------------------ ----- ------- ---- ------- - -------- - ---- - ---------- - ------------------- -- ---- -- ------------ --- - -- ----------- ----- ------- - ----------------- ------- - -------- - ------- - - ----- ------ - --- ------------- ---- ------------------------ -- ------------- ----- -- ------- --- ---- ---------- ------ ----- --------- --------------------- ------------------ -- --------- -- ---- -- --- --- - -- -- ----- ----
在这个例子中,我们将 age
定义为 private
,这意味着它只能从 Person
类中的其他方法访问,而不能从外部访问。如果我们在类外部直接尝试访问 age
,就会导致编译错误。在 changeAge
方法中,我们可以修改 age
属性,因为该方法在 Person
类的内部。
protected
protected
访问修饰符与 private
的不同之处在于,它使得实例成员可以在类和其子类中访问和修改,而不能在类的实例或类的外部访问。例如:
-- -------------------- ---- ------- ----- ------ - --------- ---- ------- ------------------ ----- ------- ---- ------- - -------- - ---- - ---------- - ------------------- -- ---- -- ------------ --- - -- ----------- ----- ------- - - ----- ------- ------- ------ - ----------------- ------- ---- ------- ------ ------ ------- - ----------- ----- - ---------- - ------------------- -- ---- -- ------------ --- - -- ----------- ----- ---- - -- -- ----- ----------------- - --------------------- ------- - ---------- - --------- - - ----- ------- - --- -------------- --- --- ------------------------- -- ------------- ----- -- --------- --- ---- ---------- ------ ----- -------- --- --- ----------- ----------------------- ------------------- -- --------- -- ---- -- --- --- - -- -- ----- ---- - -- -- ----- --
在这个例子中,我们将 age
定义为 protected
,这意味着它可以在 Person
类及其子类中访问和修改。在 Student
类中,我们重写了 sayHello
方法并访问了 name
和 age
实例成员。在 changeGrade
方法中,我们可以修改 Student
实例的 grade
属性,因为该方法在 Student
类中。
总结
在 TypeScript 中,我们可以使用类的实例成员来封装和组织代码,实例成员的访问控制修饰符能够限制实例成员的访问权限。通过掌握实例成员的定义和访问、实例成员的访问控制,读者可以更好地理解和使用 TypeScript 中类的实例成员。最后,我们在这里提供一个类的实例成员的完整示例代码供读者参考和学习。
-- -------------------- ---- ------- ----- ------ - --------- ---- ------- ------------------ ----- ------- ---- ------- - -------- - ---- - ---------- - ------------------- -- ---- -- ------------ --- - -- ----------- ----- ------- - - ----- ------- ------- ------ - ----------------- ------- ---- ------- ------ ------ ------- - ----------- ----- - ---------- - ------------------- -- ---- -- ------------ --- - -- ----------- ----- ---- - -- -- ----- ----------------- - --------------------- ------- - ---------- - --------- - - ----- ------- - --- -------------- --- --- ------------------------- -- ------------- ----- -- --------- --- ---- ---------- ------ ----- -------- --- --- ----------- ----------------------- ------------------- -- --------- -- ---- -- --- --- - -- -- ----- ---- - -- -- ----- --
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6530ed807d4982a6eb27f2d3