TypeScript 如何使用getter和setter
在TypeScript中,有两种支持的方法getter和setter来访问和设置类成员。在这个非常简短的文章中,我将向您展示包括getter和setter方法的TypeScript访问器。
实际上,getter和setter只是一种为您提供访问对象属性的方法。与其他面向对象的语言(如Java、C++等)不同,在TypeScript中,您可以直接访问变量(如下面的示例所示)。这被称为TypeScript访问器。
TypeScript访问器属性的方法:
- getter: 当您想要访问对象的任何属性时,使用此方法。getter也称为访问器。
- setter: 当您想要更改对象的任何属性时,使用此方法。setter也称为变异器。
下面给出的代码示例是一个 Student 类,具有3个属性:name,semester和course。
class Student {
public name: string;
public semester: number;
public course: string;
}
访问Student类的任何属性:
let student = new Student();
// You can access Student class variables directly
Student.name = "Aman Rathod";
Getter 方法:
注意: 获取变量值的常规方法是使用 getter 访问器属性。在对象字面量中,它由 get 关键字表示。getter 可以是公共的、受保护的或私有的。
语法:
get accessName() {
// getter, the code executed on
// getting obj.accessName
}
示例: 在这个示例中,我们将看到使用Getter方法的情况。
Javascript
class Student {
private _name: string = "Aman Rathod";
private _semester: number;
private _course: string;
// Getter method to return name of
// Student class
public get name() {
return this._name;
}
}
// Access any property of the Student class
let student = new Student();
// Getter call
let value = student.name;
console.log(value);
输出:
Aman Rathod
从上面的示例中可以观察到,当我们调用getter方法(student.name)时,我们没有像调用普通函数那样包括开放和关闭的括号。因此,您可以直接访问变量。
Setter方法: 用于更新变量值的setter属性是常规方法。它们在对象字面量中以set关键字表示。
语法:
set accessName(value) {
// The code executed on setting
// obj.accessName = value, from setter
}
示例: 在这个示例中,我们将看到setter方法的使用。
JavaScript
class Student {
private _name: string = "Aman Rathod";
private _semester: number;
private _course: string;
// Getter method to return name
// of Student class
public get name() {
return this._name;
}
// Setter method to set the semester number
public set semester(thesem: number) {
this._semester = thesem;
}
// Setter method
public set course(thecourse: string) {
this._course = thecourse;
}
}
// Access any property of the Student class
let student = new Student();
// Setter call
student.semester = 5;
student.course = "Web Development";
从上面的示例中,你还可以注意到setter方法的调用不像普通方法那样带有括号。当你调用student.semester或student.course时,会调用semester或course的setter方法并将值赋给它。
处理错误: 你也可以在setter方法中添加条件,如果条件无效则抛出错误。让我们通过下面的示例来理解。
Javascript
class Student {
private _name: string = "Aman Rathod";
private _semester: number;
private _course: string;
// Suppose the only 1st to 8th-semester students
// are allowed to purchase the courses.
public set semester(thesem: number) {
if (thesem < 1 || thesem > 8) {
throw new Error(
'Sorry, this course is valid for students from 1st to 8th semester');
}
this._semester = thesem;
}
}
// Access any property of the Student class
let student = new Student();
// setter call
student.semester = 9;
输出:
构造函数: 现在让我们讨论使用构造函数来访问Getter和Setter方法。实际上,在类中使用构造函数与不使用构造函数来访问Getter或Setter方法没有区别,但我们只是想对TypeScript中的构造函数进行概述。
示例: 在这个示例中,我们将看到使用构造函数来使用Getter和Setter方法。
Javascript
class Student {
name: string;
semester: number;
course: string;
constructor(nm: string, sm: number, cs: string) {
this.name = nm;
this.semester = sm;
this.course = cs;
}
// Getter method
public get courses() {
return this.course;
}
public set courses(thecourse: string) {
this.course = thecourse;
}
}
// Access any property of the Student class,
let student = new Student("Aman Rathod", 4, "Web Development");
// Setter call
student.course = "Data structure";
// Getter call
console.log("Course purchased is " + student.courses);
输出: